fix testing not compiling

This commit is contained in:
Sebastian 2022-12-20 15:42:53 -03:00
parent 1500c91f36
commit 382e66b179
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1
11 changed files with 149 additions and 114 deletions

View File

@ -64,7 +64,7 @@ function getFilesInDirectory(startPath, regex) {
return result return result
} }
const allTestFiles = getFilesInDirectory(path.join(BASE, 'src'), /.test.ts$/) const allTestFiles = getFilesInDirectory(path.join(BASE, 'tests'), /.test.tsx?$/)
const entryPoints = ["src/index.tsx", "src/stories.tsx", ...allTestFiles]; const entryPoints = ["src/index.tsx", "src/stories.tsx", ...allTestFiles];

View File

@ -8,7 +8,7 @@
"check": "tsc", "check": "tsc",
"compile": "tsc && ./build.mjs", "compile": "tsc && ./build.mjs",
"dev": "preact watch --port ${PORT:=8080} --no-sw --no-esm", "dev": "preact watch --port ${PORT:=8080} --no-sw --no-esm",
"test": "pnpm compile && mocha --require source-map-support/register 'dist/**/test.js'", "test": "pnpm compile && mocha --require source-map-support/register '*.test.js' 'dist/**/test.js'",
"lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'", "lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
"i18n:extract": "pogen extract", "i18n:extract": "pogen extract",
"i18n:merge": "pogen merge", "i18n:merge": "pogen merge",
@ -51,7 +51,7 @@
"@testing-library/preact-hooks": "^1.1.0", "@testing-library/preact-hooks": "^1.1.0",
"@types/history": "^4.7.8", "@types/history": "^4.7.8",
"@types/jest": "^26.0.23", "@types/jest": "^26.0.23",
"@types/mocha": "^8.2.2", "@types/mocha": "^8.2.3",
"@types/node": "^18.8.5", "@types/node": "^18.8.5",
"@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/eslint-plugin": "^4.22.0",
"@typescript-eslint/parser": "^4.22.0", "@typescript-eslint/parser": "^4.22.0",
@ -73,6 +73,8 @@
"inline-chunk-html-plugin": "^1.1.1", "inline-chunk-html-plugin": "^1.1.1",
"jest": "^26.6.3", "jest": "^26.6.3",
"jest-preset-preact": "^4.0.2", "jest-preset-preact": "^4.0.2",
"mocha": "^9.2.0",
"preact-render-to-string": "^5.2.6",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"sass": "1.56.1", "sass": "1.56.1",
"typedoc": "^0.20.36", "typedoc": "^0.20.36",

View File

@ -0,0 +1,48 @@
/*
This file is part of GNU Taler
(C) 2021-2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { h, VNode, FunctionalComponent } from "preact";
import { CreatePage as TestedComponent } from "./CreatePage.js";
export default {
title: "Pages/Instance/Create",
component: TestedComponent,
argTypes: {
onCreate: { action: "onCreate" },
goBack: { action: "goBack" },
},
};
function createExample<Props>(
Component: FunctionalComponent<Props>,
props: Partial<Props>,
) {
const r = (args: any) => h(Component, args);
// const r = (args: any) => <Component {...args} />;
r.args = props;
return r;
}
export const Example = createExample(TestedComponent, {});
// export const Example = (a: any): VNode => <CreatePage {...a} />;
// Example.args = {
// isLoading: false
// }

View File

@ -0,0 +1,18 @@
/*
This file is part of GNU Taler
(C) 2021-2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
// export * as list from "./list/stories.js";
export * as create from "./create/stories.js";

View File

@ -1,2 +0,0 @@
export * as a1 from "./admin/create/Create.stories.js";
export * as a2 from "./instance/details/Details.stories.js";

View File

@ -0,0 +1,18 @@
/*
This file is part of GNU Taler
(C) 2021-2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
export * as details from "./details/stories.js";

View File

@ -26,16 +26,3 @@ export default {
title: "Pages/Templates/Create", title: "Pages/Templates/Create",
component: TestedComponent, component: TestedComponent,
}; };
function createExample<Props>(
Component: FunctionalComponent<Props>,
props: Partial<Props>,
) {
const r = (args: any) => <Component {...args} />;
r.args = props;
return r;
}
export const Example = createExample(TestedComponent, {
accounts: ["payto://x-taler-bank/account1", "payto://x-taler-bank/account2"],
});

View File

@ -0,0 +1,49 @@
/*
This file is part of GNU Taler
(C) 2021-2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { setupI18n } from "@gnu-taler/taler-util";
import { parseGroupImport } from "@gnu-taler/web-util/lib/index.browser";
import * as admin from "./paths/admin/index.stories.js";
import * as instance from "./paths/instance/index.stories.js";
setupI18n("en", { en: {} });
import { h as create } from "preact"
import { render as renderToString } from "preact-render-to-string";
describe("All the examples:", () => {
const cms = parseGroupImport({ admin, instance });
cms.forEach((group) => {
describe(`Example for group: ${group.title}`, () => {
group.list.forEach((component) => {
describe(`Component: ${component.name}`, () => {
component.examples.forEach((example) => {
it(`should render example: ${example.name}`, () => {
const vdom = create(example.render.component, example.render.props)
const html = renderToString(vdom)
// console.log(html)
});
});
});
});
});
});
});

View File

@ -1,17 +1,17 @@
/* /*
This file is part of GNU Anastasis This file is part of GNU Taler
(C) 2021-2022 Anastasis SARL (C) 2021-2023 Taler Systems S.A.
GNU Anastasis is free software; you can redistribute it and/or modify it under the GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version. Foundation; either version 3, or (at your option) any later version.
GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with You should have received a copy of the GNU General Public License along with
GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/> GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/ */
/** /**
@ -20,7 +20,8 @@
*/ */
import { strings } from "./i18n/strings.js"; import { strings } from "./i18n/strings.js";
import * as pages from "./paths/index.stories.js"; import * as admin from "./paths/admin/index.stories.js";
import * as instance from "./paths/instance/index.stories.js";
import { renderStories } from "@gnu-taler/web-util/lib/index.browser"; import { renderStories } from "@gnu-taler/web-util/lib/index.browser";
@ -32,7 +33,7 @@ function SortStories(a: any, b: any): number {
function main(): void { function main(): void {
renderStories( renderStories(
{ pages }, { admin, instance },
{ {
strings, strings,
}, },

View File

@ -1,86 +0,0 @@
/*
This file is part of GNU Taler
(C) 2021-2023 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { h, VNode } from "preact";
import * as config from "../src/context/config.js";
import * as i18n from "../src/context/translation.js";
import { cleanup, render as originalRender } from "@testing-library/preact";
import { SWRConfig } from "swr";
import fs from "fs";
function getFiles(dir: string, files_: string[] = []) {
const files = fs.readdirSync(dir);
for (const i in files) {
const name = dir + "/" + files[i];
if (fs.statSync(name).isDirectory()) {
getFiles(name, files_);
} else {
files_.push(name);
}
}
return files_;
}
const STORIES_NAME_REGEX = RegExp(".*.stories.tsx");
function render(vnode: VNode) {
const SC: any = SWRConfig
return originalRender(
<SC value={{ provider: () => new Map() }}>
{vnode}
</SC>,
);
}
import * as jedLib from "jed";
const handler = new jedLib.Jed("en");
describe("storybook testing", () => {
it("render every story", () => {
jest
.spyOn(config, "useConfigContext")
.mockImplementation(() => ({ version: "1.0.0", currency: "EUR" }));
jest.spyOn(i18n, "useTranslationContext").mockImplementation(() => ({
changeLanguage: () => null,
handler,
lang: "en",
}));
getFiles("./src")
.filter((f) => STORIES_NAME_REGEX.test(f))
.map((f) => {
// const f = "./src/paths/instance/transfers/list/List.stories.tsx";
// eslint-disable-next-line @typescript-eslint/no-var-requires
const s = require(`../${f}`);
delete s.default;
Object.keys(s).forEach((k) => {
const Component = s[k];
const vdom = <Component {...Component.args} />;
expect(() => {
const { unmount } = render(vdom);
unmount();
}).not.toThrow(); //`problem rendering ${f} example ${k}`
cleanup();
});
});
});
});