summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriwata <ishowta@gmail.com>2022-05-14 15:16:45 +0900
committerGitHub <noreply@github.com>2022-05-14 15:16:45 +0900
commit22bb1a17930bdbcf9a2068790efd880fe8ff4158 (patch)
treec6b2f5fb7c3747001dc90c22c84fa73a881c4923
parentfix: keep file order (#8659) (diff)
downloadmisskey-22bb1a17930bdbcf9a2068790efd880fe8ff4158.tar.gz
misskey-22bb1a17930bdbcf9a2068790efd880fe8ff4158.tar.bz2
misskey-22bb1a17930bdbcf9a2068790efd880fe8ff4158.zip
test: e2eテストがCIで失敗していた問題をいくつか修正 (#8642)
* test: indexeddbをテスト毎に初期化するように * fix: metaが無いときにfetch-metaを同時に呼ぶと死ぬことがある問題を修正 * test: ログイン後のクライアント側処理を待たずにリロードされてログイン出来ないことがあったのを修正
-rw-r--r--cypress/integration/basic.js16
-rw-r--r--packages/backend/src/misc/fetch-meta.ts13
2 files changed, 23 insertions, 6 deletions
diff --git a/cypress/integration/basic.js b/cypress/integration/basic.js
index 7d27b649f4..eb15cfe223 100644
--- a/cypress/integration/basic.js
+++ b/cypress/integration/basic.js
@@ -1,5 +1,8 @@
describe('Before setup instance', () => {
beforeEach(() => {
+ cy.window(win => {
+ win.indexedDB.deleteDatabase('keyval-store');
+ });
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
@@ -32,6 +35,9 @@ describe('Before setup instance', () => {
describe('After setup instance', () => {
beforeEach(() => {
+ cy.window(win => {
+ win.indexedDB.deleteDatabase('keyval-store');
+ });
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
@@ -70,6 +76,9 @@ describe('After setup instance', () => {
describe('After user signup', () => {
beforeEach(() => {
+ cy.window(win => {
+ win.indexedDB.deleteDatabase('keyval-store');
+ });
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
@@ -129,6 +138,9 @@ describe('After user signup', () => {
describe('After user singed in', () => {
beforeEach(() => {
+ cy.window(win => {
+ win.indexedDB.deleteDatabase('keyval-store');
+ });
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
@@ -163,12 +175,10 @@ describe('After user singed in', () => {
});
it('successfully loads', () => {
- cy.visit('/');
+ cy.get('[data-cy-open-post-form]').should('be.visible');
});
it('note', () => {
- cy.visit('/');
-
cy.get('[data-cy-open-post-form]').click();
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
cy.get('[data-cy-open-post-form-submit]').click();
diff --git a/packages/backend/src/misc/fetch-meta.ts b/packages/backend/src/misc/fetch-meta.ts
index 5417c10962..e855ac28ee 100644
--- a/packages/backend/src/misc/fetch-meta.ts
+++ b/packages/backend/src/misc/fetch-meta.ts
@@ -20,9 +20,16 @@ export async function fetchMeta(noCache = false): Promise<Meta> {
cache = meta;
return meta;
} else {
- const saved = await transactionalEntityManager.save(Meta, {
- id: 'x',
- }) as Meta;
+ // metaが空のときfetchMetaが同時に呼ばれるとここが同時に呼ばれてしまうことがあるのでフェイルセーフなupsertを使う
+ const saved = await transactionalEntityManager
+ .upsert(
+ Meta,
+ {
+ id: 'x',
+ },
+ ['id'],
+ )
+ .then((x) => transactionalEntityManager.findOneByOrFail(Meta, x.identifiers[0]));
cache = saved;
return saved;