test: improve e2e test

This commit is contained in:
syuilo 2021-09-19 14:27:16 +09:00
parent 42c19f49bd
commit ef3b823c11

View file

@ -1,4 +1,4 @@
describe('Basic', () => { describe('Before setup instance', () => {
beforeEach(() => { beforeEach(() => {
cy.request('POST', '/api/reset-db').as('reset'); cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204); cy.get('@reset').its('status').should('equal', 204);
@ -28,15 +28,34 @@ describe('Basic', () => {
//cy.wait('@signup').should('have.property', 'response.statusCode'); //cy.wait('@signup').should('have.property', 'response.statusCode');
cy.wait('@signup'); cy.wait('@signup');
}); });
});
describe('After setup instance', () => {
beforeEach(() => {
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
it('signup', () => {
// インスタンス初期セットアップ // インスタンス初期セットアップ
cy.request('POST', '/api/admin/accounts/create', { cy.request('POST', '/api/admin/accounts/create', {
username: 'admin', username: 'admin',
password: 'pass', password: 'pass',
}).as('setup'); }).its('body').as('admin');
cy.get('@setup').then(() => { cy.get('@admin');
});
afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
it('successfully loads', () => {
cy.visit('/');
});
it('signup', () => {
cy.visit('/'); cy.visit('/');
cy.intercept('POST', '/api/signup').as('signup'); cy.intercept('POST', '/api/signup').as('signup');
@ -51,22 +70,40 @@ describe('Basic', () => {
}); });
}); });
it('signin', () => { describe('After user signup', () => {
beforeEach(() => {
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
// インスタンス初期セットアップ // インスタンス初期セットアップ
cy.request('POST', '/api/admin/accounts/create', { cy.request('POST', '/api/admin/accounts/create', {
username: 'admin', username: 'admin',
password: 'pass', password: 'pass',
}).as('setup'); }).its('body').as('admin');
cy.get('@setup').then(() => { cy.get('@admin').then(() => {
// ユーザー作成 // ユーザー作成
cy.request('POST', '/api/signup', { cy.request('POST', '/api/signup', {
username: 'alice', username: 'alice',
password: 'alice1234', password: 'alice1234',
}).as('signup'); }).its('body').as('alice');
}); });
cy.get('@signup').then(() => { cy.get('@alice');
});
afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
it('successfully loads', () => {
cy.visit('/');
});
it('signin', () => {
cy.visit('/'); cy.visit('/');
cy.intercept('POST', '/api/signin').as('signin'); cy.intercept('POST', '/api/signin').as('signin');
@ -78,47 +115,29 @@ describe('Basic', () => {
cy.wait('@signin'); cy.wait('@signin');
}); });
it('suspend', function() {
cy.request('POST', '/api/admin/suspend-user', {
i: this.admin.token,
userId: this.alice.id,
}); });
it('note', () => {
cy.visit('/'); cy.visit('/');
// インスタンス初期セットアップ
cy.request('POST', '/api/admin/accounts/create', {
username: 'admin',
password: 'pass',
}).as('setup');
cy.get('@setup').then(() => {
// ユーザー作成
cy.request('POST', '/api/signup', {
username: 'alice',
password: 'alice1234',
}).as('signup');
});
cy.get('@signup').then(() => {
cy.visit('/');
cy.intercept('POST', '/api/signin').as('signin');
cy.get('[data-cy-signin]').click(); cy.get('[data-cy-signin]').click();
cy.get('[data-cy-signin-username] input').type('alice'); cy.get('[data-cy-signin-username] input').type('alice');
cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.wait('@signin').as('signinEnd'); cy.contains('アカウントが凍結されています');
});
cy.get('@signinEnd').then(() => {
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();
cy.contains('Hello, Misskey!');
}); });
}); });
it('suspend', function() { describe('After user singed in', () => {
beforeEach(() => {
cy.request('POST', '/api/reset-db').as('reset');
cy.get('@reset').its('status').should('equal', 204);
cy.reload(true);
// インスタンス初期セットアップ // インスタンス初期セットアップ
cy.request('POST', '/api/admin/accounts/create', { cy.request('POST', '/api/admin/accounts/create', {
username: 'admin', username: 'admin',
@ -134,18 +153,37 @@ describe('Basic', () => {
}); });
cy.get('@alice').then(() => { cy.get('@alice').then(() => {
cy.request('POST', '/api/admin/suspend-user', {
i: this.admin.token,
userId: this.alice.id,
});
cy.visit('/'); cy.visit('/');
cy.intercept('POST', '/api/signin').as('signin');
cy.get('[data-cy-signin]').click(); cy.get('[data-cy-signin]').click();
cy.get('[data-cy-signin-username] input').type('alice'); cy.get('[data-cy-signin-username] input').type('alice');
cy.get('[data-cy-signin-password] input').type('alice1234{enter}'); cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.contains('アカウントが凍結されています'); cy.wait('@signin').as('signedIn');
}); });
cy.get('@signedIn');
});
afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
it('successfully loads', () => {
cy.visit('/');
});
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();
cy.contains('Hello, Misskey!');
}); });
}); });