Skip to content

Commit

Permalink
test: add tests for TeachingUnitRepository
Browse files Browse the repository at this point in the history
  • Loading branch information
Flowrey committed Sep 8, 2024
1 parent 16e2cd8 commit b5526a5
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 2 deletions.
5 changes: 4 additions & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,8 @@ export default {
},
roots: ["<rootDir>/src/", "<rootDir>/tests/"],
coverageReporters: ["text", "html"],
collectCoverageFrom: ["src/**/*.{js,ts}"]
collectCoverageFrom: ["src/**/*.{js,ts}"],
moduleNameMapper: {
"^webextension-polyfill$": "<rootDir>/tests/__mocks__/browser.ts",
},
};
2 changes: 1 addition & 1 deletion src/js/teaching_unit/repository.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Observer } from "../utils";
import { State, TeachingUnit } from "./model";
import * as browser from "webextension-polyfill";
import browser from "webextension-polyfill";

export class TeachingUnitRepository implements Observer {
constructor(s: TeachingUnit) {
Expand Down
42 changes: 42 additions & 0 deletions tests/__mocks__/webextension-polyfill.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
declare global {
// eslint-disable-next-line no-var
var myLocalStorage: object;
}

export const browser = {
storage: {
local: {
get: function (code: string) {
if (globalThis.myLocalStorage == undefined) {
globalThis.myLocalStorage = {};
}
if (code in globalThis.myLocalStorage) {
return Promise.resolve(globalThis.myLocalStorage[code]);
}
return {};
},
set: function (obj: object) {
if (globalThis.myLocalStorage == undefined) {
globalThis.myLocalStorage = {};
}
const code = Object.keys(obj)[0];
const state = Object.values(obj)[0];
const record = {};
record[code] = state;
globalThis.myLocalStorage[code] = record;
return Promise.resolve();
},
remove: function (code: string) {
if (globalThis.myLocalStorage == undefined) {
globalThis.myLocalStorage = {};
}
if (code in globalThis.myLocalStorage) {
delete globalThis.myLocalStorage[code];
}
return Promise.resolve();
},
},
},
};

export default browser;
41 changes: 41 additions & 0 deletions tests/teaching_unit_repository.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { State, TeachingUnit } from "../src/js/teaching_unit/model";
import { TeachingUnitRepository } from "../src/js/teaching_unit/repository";

test("save and delete from/to local storage", () => {
document.body.innerHTML =
'<div class="ue option clearfix">' +
' <div class=" infos-ue">' +
' <div class="details clearfix">' +
' <div class="credits">6 ECTS<span class="dico"><span class="icon icon-help_simple"></span></span></div>' +
' <h4 class="titre">' +
' <a id="intitule_5df3b7279a53cb218ffb5684789f8939" href="/servlet/uFF?OBJET=ue&amp;CODE=MVA003&amp;LANGUE=0&amp;RF=" target="ue">Mathematical tools for computing</a>' +
" </h4>" +
' <div class="code">' +
' <a id="code_5df3b7279a53cb218ffb5684789f8939" href="/servlet/uFF?OBJET=ue&amp;CODE=MVA003&amp;LANGUE=0&amp;RF=" target="ue">MVA003</a>' +
" </div>" +
" </div>" +
" </div>" +
"</div>";
const el = document.getElementsByClassName("ue")[0];
const teachingUnit = TeachingUnit.fromElement(el);

new TeachingUnitRepository(teachingUnit);
TeachingUnitRepository.getFromLocalStorage(el).then((teaching_unit) => {
expect(teaching_unit.state).toBe(State.Unselected);
});

teachingUnit.toggle();
TeachingUnitRepository.getFromLocalStorage(el).then((teaching_unit) => {
expect(teaching_unit.state).toBe(State.Selected);
});

teachingUnit.toggle();
TeachingUnitRepository.getFromLocalStorage(el).then((teaching_unit) => {
expect(teaching_unit.state).toBe(State.Validated);
});

teachingUnit.toggle();
TeachingUnitRepository.getFromLocalStorage(el).then((teaching_unit) => {
expect(teaching_unit.state).toBe(State.Unselected);
});
});

0 comments on commit b5526a5

Please sign in to comment.