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.filtersPage.js (17014B)


      1 // filter-input component
      2 describe("FilterInput", function() {
      3     let FilterInput;
      4     beforeEach(function() {
      5         // Create filtersInput component
      6         FilterInput = new filterInput();
      7     });
      8 
      9     describe("Created lifecycle hook", function() {
     10         it("Category should be 'verbs'", function() {
     11             expect(FilterInput.category).to.equal("verbs");
     12         });
     13 
     14         it("VerbFilters should be empty", function() {
     15             expect(FilterInput.verbFilters).to.deep.equal([]);
     16         });
     17 
     18         it("VocabFilters should be empty", function() {
     19             expect(FilterInput.vocabFilters).to.deep.equal([]);
     20         });
     21     });
     22 
     23     describe("Value computed property", function() {
     24         it("Should return verb filters if category is 'verbs'", function() {
     25             // Initialize variables
     26             FilterInput.category = "verbs";
     27             FilterInput.verbFilters = "verb-filters";
     28             FilterInput.vocabFilters = "vocab-filters";
     29 
     30             // Assert value returns verb filters
     31             expect(FilterInput.value, "verb-filters");
     32         });
     33 
     34         it("Should return vocab filters if category is 'vocab'", function() {
     35             // Initialize variables
     36             FilterInput.category = "vocab";
     37             FilterInput.verbFilters = "verb-filters";
     38             FilterInput.vocabFilters = "vocab-filters";
     39 
     40             // Assert value returns vocab filters
     41             expect(FilterInput.value, "vocab-filters");
     42         });
     43     });
     44 
     45     describe("Value watch", function() {
     46         it("Should emit input event", async function() {
     47             // Initialize variables
     48             FilterInput.category = "verbs";
     49             FilterInput.verbFilters = ["filter1"];
     50 
     51             // Override $emit method
     52             let event = "";
     53             let event_args;
     54             FilterInput.$emit = function(name, value) {
     55                 event = name;
     56                 event_args = value;
     57             };
     58 
     59             // Edit verb filters
     60             FilterInput.verbFilters.push("filter2");
     61             await FilterInput.$nextTick();
     62 
     63             // Assert event emited
     64             expect(event).to.equal("input");
     65             expect(event_args).to.have.deep.members(["filter1", "filter2"]);
     66         });
     67     });
     68 
     69     describe("AddFilter method", function() {
     70         it("Should add a verb filter if category is 'verbs'", function() {
     71             // Initialize variables
     72             FilterInput.category = "verbs";
     73             FilterInput.verbFilters = []
     74             FilterInput.vocabFilters = []
     75             expect(FilterInput.verbFilters.length).to.equal(0);
     76             expect(FilterInput.vocabFilters.length).to.equal(0);
     77 
     78             // Override getSettings method
     79             let old_getSettings = getSettings
     80             getSettings = function() {
     81                 let settings = old_getSettings();
     82                 settings.defaultFilters.verbs = {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."};
     83                 return settings;
     84             };
     85 
     86             // Add filter
     87             FilterInput.AddFilter();
     88 
     89             // Restore getSettings method
     90             getSettings = old_getSettings;
     91 
     92             // Assert filter added
     93             expect(FilterInput.verbFilters).to.have.deep.members([
     94                 {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."},
     95             ]);
     96             expect(FilterInput.vocabFilters).to.have.deep.members([]);
     97         });
     98 
     99         it("Should add a vocab filter if category is 'vocab'", function() {
    100             // Initialize variables
    101             FilterInput.category = "vocab";
    102             FilterInput.verbFilters = []
    103             FilterInput.vocabFilters = []
    104             expect(FilterInput.verbFilters.length).to.equal(0);
    105             expect(FilterInput.vocabFilters.length).to.equal(0);
    106 
    107             // Override getSettings method
    108             let old_getSettings = getSettings
    109             getSettings = function() {
    110                 let settings = old_getSettings();
    111                 settings.defaultFilters.vocab = {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."};
    112                 return settings;
    113             };
    114 
    115             // Add filter
    116             FilterInput.AddFilter();
    117 
    118             // Restore getSettings method
    119             getSettings = old_getSettings;
    120 
    121             // Assert filter added
    122             expect(FilterInput.vocabFilters).to.have.deep.members([
    123                 {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."},
    124             ]);
    125             expect(FilterInput.verbFilters).to.have.deep.members([]);
    126         });
    127     });
    128 
    129     describe("RemoveFilter method", function() {
    130         it("Should remove the specified verb filter", function() {
    131             // Initialize filters
    132             FilterInput.category = "verbs";
    133             FilterInput.verbFilters = [
    134                 "verb1",
    135                 "verb2",
    136                 "verb3",
    137             ];
    138             FilterInput.vocabFilters = [
    139                 "vocab1",
    140                 "vocab2",
    141                 "vocab3",
    142             ];
    143 
    144             // Remove filter
    145             FilterInput.RemoveFilter(1);
    146 
    147             // Assert filter removed
    148             expect(FilterInput.verbFilters.length).to.equal(2);
    149             expect(FilterInput.verbFilters[0]).to.equal("verb1");
    150             expect(FilterInput.verbFilters[1]).to.equal("verb3");
    151             expect(FilterInput.vocabFilters.length).to.equal(3);
    152         });
    153 
    154         it("Should remove the specified vocab filter", function() {
    155             // Initialize filters
    156             FilterInput.category = "vocab";
    157             FilterInput.verbFilters = [
    158                 "verb1",
    159                 "verb2",
    160                 "verb3",
    161             ];
    162             FilterInput.vocabFilters = [
    163                 "vocab1",
    164                 "vocab2",
    165                 "vocab3",
    166             ];
    167 
    168             // Remove filter
    169             FilterInput.RemoveFilter(1);
    170 
    171             // Assert filter removed
    172             expect(FilterInput.verbFilters.length).to.equal(3);
    173             expect(FilterInput.vocabFilters.length).to.equal(2);
    174             expect(FilterInput.vocabFilters[0]).to.equal("vocab1");
    175             expect(FilterInput.vocabFilters[1]).to.equal("vocab3");
    176         });
    177     });
    178 
    179     describe("GetTenseTypes method", function() {
    180         it("Should be correct for All Tenses", function() {
    181             // Initialize filters
    182             FilterInput.verbFilters = [
    183                 {tense:"All Types", type:"All Types"}
    184             ]
    185 
    186             // Get filters
    187             let filters = FilterInput.getTenseTypes(0);
    188 
    189             // Assert filters are correct
    190             expect(filters["All Types"]).to.equal(true);
    191             expect(filters["Reflexive"]).to.equal(true);
    192             expect(filters["Regular"]).to.equal(true);
    193             expect(filters["Nonregular"]).to.equal(true);
    194             expect(filters["Stem Changing"]).to.equal(true);
    195             expect(filters["Orthographic"]).to.equal(true);
    196             expect(filters["Irregular"]).to.equal(true);
    197         });
    198 
    199         it("Should be correct for Present Tense", function() {
    200             // Initialize filters
    201             FilterInput.verbFilters = [
    202                 {tense:"Present Tense", type:"All Types"}
    203             ]
    204 
    205             // Get filters
    206             let filters = FilterInput.getTenseTypes(0);
    207 
    208             // Assert filters are correct
    209             expect(filters["All Types"]).to.equal(true);
    210             expect(filters["Reflexive"]).to.equal(true);
    211             expect(filters["Regular"]).to.equal(true);
    212             expect(filters["Nonregular"]).to.equal(true);
    213             expect(filters["Stem Changing"]).to.equal(true);
    214             expect(filters["Orthographic"]).to.equal(false);
    215             expect(filters["Irregular"]).to.equal(true);
    216         });
    217 
    218         it("Should change selection if not available", function() {
    219             // Initialize filters
    220             FilterInput.verbFilters = [
    221                 {tense:"Present Tense", type:"Orthographic"}
    222             ]
    223 
    224             // Get filters
    225             let filters = FilterInput.getTenseTypes(0);
    226 
    227             // Assert filters are correct
    228             expect(filters["All Types"]).to.equal(true);
    229             expect(filters["Reflexive"]).to.equal(true);
    230             expect(filters["Regular"]).to.equal(true);
    231             expect(filters["Nonregular"]).to.equal(true);
    232             expect(filters["Stem Changing"]).to.equal(true);
    233             expect(filters["Orthographic"]).to.equal(false);
    234             expect(filters["Irregular"]).to.equal(true);
    235 
    236             // Assert selection changed
    237             expect(FilterInput.verbFilters[0]["type"]).to.equal("All Types");
    238         });
    239 
    240         it("Should not change selection if available", function() {
    241             // Initialize filters
    242             FilterInput.verbFilters = [
    243                 {tense:"Preterite Tense", type:"Orthographic"}
    244             ]
    245 
    246             // Get filters
    247             let filters = FilterInput.getTenseTypes(0);
    248 
    249             // Assert filters are correct
    250             expect(filters["All Types"]).to.equal(true);
    251             expect(filters["Reflexive"]).to.equal(true);
    252             expect(filters["Regular"]).to.equal(true);
    253             expect(filters["Nonregular"]).to.equal(true);
    254             expect(filters["Stem Changing"]).to.equal(true);
    255             expect(filters["Orthographic"]).to.equal(true);
    256             expect(filters["Irregular"]).to.equal(true);
    257 
    258             // Assert selection not changed
    259             expect(FilterInput.verbFilters[0]["type"]).to.equal("Orthographic");
    260         });
    261     });
    262 
    263     describe("GetTenseSubjects method", function() {
    264         it("Should be correct for All Tenses", function() {
    265             // Initialize filters
    266             FilterInput.verbFilters = [
    267                 {tense:"All Types", type:"All Types"}
    268             ]
    269 
    270             // Get filters
    271             let filters = FilterInput.getTenseSubjects(0);
    272 
    273             // Assert filters are correct
    274             expect(filters["All Subjects"]).to.equal(true);
    275             expect(filters["Yo"]).to.equal(true);
    276             expect(filters["Tú"]).to.equal(true);
    277             expect(filters["Él"]).to.equal(true);
    278             expect(filters["Nosotros"]).to.equal(true);
    279             expect(filters["Ellos"]).to.equal(true);
    280         });
    281 
    282         it("Should be correct for Present Participles", function() {
    283             // Initialize filters
    284             FilterInput.verbFilters = [
    285                 {tense:"Present Participles", subject:"All Subjects", type:"All Types"}
    286             ]
    287 
    288             // Get filters
    289             let filters = FilterInput.getTenseSubjects(0);
    290 
    291             // Assert filters are correct
    292             expect(filters["All Subjects"]).to.equal(true);
    293             expect(filters["Yo"]).to.equal(false);
    294             expect(filters["Tú"]).to.equal(false);
    295             expect(filters["Él"]).to.equal(false);
    296             expect(filters["Nosotros"]).to.equal(false);
    297             expect(filters["Ellos"]).to.equal(false);
    298         });
    299 
    300         it("Should change selection if not available", function() {
    301             // Initialize filters
    302             FilterInput.verbFilters = [
    303                 {tense:"Present Participles", subject:"Yo", type:"All Types"}
    304             ]
    305 
    306             // Get filters
    307             let filters = FilterInput.getTenseSubjects(0);
    308 
    309             // Assert filters are correct
    310             expect(filters["All Subjects"]).to.equal(true);
    311             expect(filters["Yo"]).to.equal(false);
    312             expect(filters["Tú"]).to.equal(false);
    313             expect(filters["Él"]).to.equal(false);
    314             expect(filters["Nosotros"]).to.equal(false);
    315             expect(filters["Ellos"]).to.equal(false);
    316 
    317             // Assert selection changed
    318             expect(FilterInput.verbFilters[0]["subject"]).to.equal("All Subjects");
    319         });
    320 
    321         it("Should not change selection if available", function() {
    322             // Initialize filters
    323             FilterInput.verbFilters = [
    324                 {tense:"Present Participles", subject:"Type", type:"All Types"},
    325                 {tense:"Preterite Tense", subject:"Yo", type:"All Types"},
    326             ]
    327 
    328             // Get filters
    329             FilterInput.getTenseSubjects(0);
    330             FilterInput.getTenseSubjects(1);
    331 
    332             // Assert selection not changed
    333             expect(FilterInput.verbFilters[0].subject).to.equal("Type");
    334             expect(FilterInput.verbFilters[1].subject).to.equal("Yo");
    335         });
    336     });
    337 
    338     describe("GetCategoryFilters method", function() {
    339         it("Should be correct for Verbs", function() {
    340             // Initialize filters
    341             FilterInput.vocabFilters = [
    342                 {category:"Verbs", type:"All Definitions"}
    343             ]
    344 
    345             // Get filters
    346             let filters = FilterInput.getCategoryFilters(0);
    347 
    348             // Assert filters are correct
    349             expect(filters["All Types"]).to.equal(true);
    350             expect(filters["Adjectives"]).to.equal(false);
    351             expect(filters["Nouns"]).to.equal(false);
    352             expect(filters["Verbs"]).to.equal(false);
    353         });
    354 
    355         it("Should be correct for sets with 1 type", function() {
    356             // Initialize filters
    357             FilterInput.vocabFilters = [
    358                 {category:"Colors", type:"All Definitions"}
    359             ]
    360 
    361             // Get filters
    362             let filters = FilterInput.getCategoryFilters(0);
    363 
    364             // Assert filters are correct
    365             expect(filters["All Types"]).to.equal(true);
    366             expect(filters["Adjectives"]).to.equal(true);
    367             expect(filters["Nouns"]).to.equal(false);
    368             expect(filters["Verbs"]).to.equal(false);
    369         });
    370 
    371         it("Should change selection if not available", function() {
    372             // Initialize filters
    373             FilterInput.vocabFilters = [
    374                 {category:"Colors", type:"Verbs"}
    375             ]
    376 
    377             // Get filters
    378             let filters = FilterInput.getCategoryFilters(0);
    379 
    380             // Assert selection changed
    381             expect(filters["All Types"]).to.equal(true);
    382             expect(filters["Adjectives"]).to.equal(true);
    383             expect(filters["Nouns"]).to.equal(false);
    384             expect(filters["Verbs"]).to.equal(false);
    385             expect(FilterInput.vocabFilters[0]["type"]).to.equal("All Types");
    386         });
    387 
    388         it("Should not change selection if available", function() {
    389             // Initialize filters
    390             FilterInput.vocabFilters = [
    391                 {category:"Professions", type:"Verbs"}
    392             ]
    393 
    394             // Get filters
    395             let filters = FilterInput.getCategoryFilters(0);
    396 
    397             // Assert selection not changed
    398             expect(filters["All Types"]).to.equal(true);
    399             expect(filters["Adjectives"]).to.equal(false);
    400             expect(filters["Nouns"]).to.equal(true);
    401             expect(filters["Verbs"]).to.equal(true);
    402             expect(FilterInput.vocabFilters[0]["type"]).to.equal("Verbs");
    403         });
    404     });
    405 });
    406 
    407 
    408 
    409 // filters-page component
    410 describe("FiltersPage", function() {
    411     let FiltersPage;
    412     beforeEach(function() {
    413         // Create filtersPage component
    414         FiltersPage = new filtersPage();
    415     });
    416 
    417     describe("StartSession method", function() {
    418         it("Should push quizzer page", function() {
    419             // Override $router.push method
    420             let push_args;
    421             FiltersPage.$router = {push: function(args) {
    422                 push_args = args;
    423             }};
    424 
    425             // Override $root.$data.data property
    426             FiltersPage.$root = {$data: {data: {vocab: [
    427                 ["English","Spanish","Type","Category"],
    428                 ["Hello","Hola","Type","Category"],
    429             ]}}};
    430 
    431             // Initialize variables
    432             FiltersPage.category = "vocab";
    433             FiltersPage.settings = {
    434                 promptType: "Text",     // Required to prevent browser validation alerts
    435                 inputType: "Text",      // Required to prevent browser validation alerts
    436                 testSetting: "testValue",
    437             };
    438             FiltersPage.filters = [
    439                 {category:"All Categories", type:"All Types", direction:"Eng. → Esp."}
    440             ];
    441 
    442             // Call StartSession
    443             FiltersPage.StartSession([1, 2, 3], 0);
    444 
    445             // Assert event emited
    446             expect(push_args).to.deep.equal({
    447                 name: "quizzer",
    448                 params: {
    449                     startingPrompts: [["English", "Hello", "Spanish", "Hola"]],
    450                     startingIndex: 0,
    451                     settings: {
    452                         promptType: "Text",     // Required to prevent browser validation alerts
    453                         inputType: "Text",      // Required to prevent browser validation alerts
    454                         testSetting: "testValue",
    455                     },
    456                     referer: FiltersPage.category,
    457                 }
    458             });
    459         });
    460     });
    461 });