diff options
| author | iwata <ishowta@gmail.com> | 2022-05-14 15:16:45 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-14 15:16:45 +0900 |
| commit | 22bb1a17930bdbcf9a2068790efd880fe8ff4158 (patch) | |
| tree | c6b2f5fb7c3747001dc90c22c84fa73a881c4923 | |
| parent | fix: keep file order (#8659) (diff) | |
| download | misskey-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.js | 16 | ||||
| -rw-r--r-- | packages/backend/src/misc/fetch-meta.ts | 13 |
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; |