spanish-quizzer

An app to quiz you on Spanish vocabulary and verb conjugations
git clone https://git.ashermorgan.net/spanish-quizzer/
Log | Files | Refs | README

test.global.js (4750B)


      1 describe("Global.js", function() {
      2     describe("GetSettings method", function() {
      3         it("Settings should be loaded", async function() {
      4             // Save original setting from localStorage
      5             let originalValue = localStorage.getItem("settings");
      6 
      7             // Set localStorage settings
      8             let expected = {
      9                 darkTheme: true,
     10                 conjugationColors: true,
     11 
     12                 promptType: "Audio",
     13                 inputType: "Voice",
     14                 multiplePrompts: "Show one",
     15                 removeDuplicates: true,
     16 
     17                 onMissedPrompt: "Tell me",
     18                 repeatPrompts: "5 prompts later",
     19                 multipleAnswers: "Require any",
     20                 showDiff: "Never",
     21 
     22                 defaultFilters: {
     23                     verbs: {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."},
     24                     vocab: {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."},
     25                 },
     26             };
     27             localStorage.setItem("settings", JSON.stringify(expected));
     28 
     29             // Call getSettings
     30             let settings = getSettings();
     31 
     32             // Assert settings loaded
     33             expect(settings).to.deep.equal(expected);
     34 
     35             // Restore original setting to localStorage
     36             localStorage.setItem("settings", originalValue);
     37         });
     38 
     39         it("Invalid individual settings should not be loaded", async function() {
     40             // Save original setting from localStorage
     41             let originalValue = localStorage.getItem("settings");
     42 
     43             // Set localStorage settings
     44             localStorage.setItem("settings", "{\"promptType\":\"Audio\",\"inputType\":\"test\",\"onMissedPrompt\":null}")
     45 
     46             // Call getSettings
     47             let settings = getSettings();
     48 
     49             // Assert default settings loaded
     50             expect(settings.promptType).to.equal("Audio"); // promptType wasn't invalid, so it should still be loaded
     51             expect(settings.inputType).to.equal("Text");
     52             expect(settings.onMissedPrompt).to.equal("Correct me");
     53             expect(settings.repeatPrompts).to.equal("Never");
     54 
     55             // Restore original setting to localStorage
     56             localStorage.setItem("settings", originalValue);
     57         });
     58 
     59         it("Invalid JSON settings should not be loaded", async function() {
     60             // Save original setting from localStorage
     61             let originalValue = localStorage.getItem("settings");
     62 
     63             // Set localStorage settings
     64             localStorage.setItem("settings", "asdf")
     65 
     66             // Call getSettings
     67             let settings = getSettings();
     68 
     69             // Assert default settings loaded
     70             expect(settings).to.deep.equal({
     71                 darkTheme: settings.darkTheme = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches),
     72                 conjugationColors: true,
     73 
     74                 promptType: "Text",
     75                 inputType: "Text",
     76                 multiplePrompts: "Show together",
     77                 removeDuplicates: false,
     78 
     79                 onMissedPrompt: "Correct me",
     80                 repeatPrompts: "Never",
     81                 multipleAnswers: "Require all",
     82                 showDiff: "For single answers",
     83 
     84                 defaultFilters: {
     85                     verbs: {tense:"All Tenses", type:"All Types", subject:"All Subjects", direction:"Eng. → Conj."},
     86                     vocab: {category:"All Categories", type:"All Types", direction:"Eng. ↔ Esp."},
     87                 },
     88             });
     89 
     90             // Restore original setting to localStorage
     91             localStorage.setItem("settings", originalValue);
     92         });
     93     });
     94 
     95     describe("SetSettings method", function() {
     96         it("Should update setting in localStorage", async function() {
     97             // Save original setting from localStorage
     98             let originalValue = localStorage.getItem("settings");
     99 
    100             // Set settings
    101             let settings = {
    102                 darkTheme : "A",
    103                 conjugationColors: "B",
    104 
    105                 promptType : "C",
    106                 inputType : "D",
    107                 multiplePrompts : "E",
    108                 removeDuplicates : "F",
    109 
    110                 onMissedPrompt : "G",
    111                 repeatPrompts : "H",
    112                 multipleAnswers : "I",
    113                 showDiff: "J",
    114             }
    115 
    116             // Call setSettings
    117             setSettings(settings);
    118 
    119             // Assert localStorage setting updated
    120             expect(localStorage.getItem("settings")).to.equal(JSON.stringify(settings));
    121 
    122             // Restore original setting to localStorage
    123             localStorage.setItem("settings", originalValue);
    124         });
    125     });
    126 });