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,97 +28,116 @@ 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');
cy.visit('/'); });
cy.intercept('POST', '/api/signup').as('signup'); afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
cy.get('[data-cy-signup]').click(); it('successfully loads', () => {
cy.get('[data-cy-signup-username] input').type('alice'); cy.visit('/');
cy.get('[data-cy-signup-password] input').type('alice1234'); });
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
cy.get('[data-cy-signup-submit]').click();
cy.wait('@signup'); it('signup', () => {
cy.visit('/');
cy.intercept('POST', '/api/signup').as('signup');
cy.get('[data-cy-signup]').click();
cy.get('[data-cy-signup-username] input').type('alice');
cy.get('[data-cy-signup-password] input').type('alice1234');
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
cy.get('[data-cy-signup-submit]').click();
cy.wait('@signup');
});
});
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', {
username: 'admin',
password: 'pass',
}).its('body').as('admin');
cy.get('@admin').then(() => {
// ユーザー作成
cy.request('POST', '/api/signup', {
username: 'alice',
password: 'alice1234',
}).its('body').as('alice');
}); });
cy.get('@alice');
});
afterEach(() => {
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
// waitを入れることでそれを防止できる
cy.wait(1000);
});
it('successfully loads', () => {
cy.visit('/');
}); });
it('signin', () => { it('signin', () => {
// インスタンス初期セットアップ cy.visit('/');
cy.request('POST', '/api/admin/accounts/create', {
username: 'admin',
password: 'pass',
}).as('setup');
cy.get('@setup').then(() => { cy.intercept('POST', '/api/signin').as('signin');
// ユーザー作成
cy.request('POST', '/api/signup', {
username: 'alice',
password: 'alice1234',
}).as('signup');
});
cy.get('@signup').then(() => { cy.get('[data-cy-signin]').click();
cy.visit('/'); cy.get('[data-cy-signin-username] input').type('alice');
// Enterキーでサインインできるかの確認も兼ねる
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.intercept('POST', '/api/signin').as('signin'); cy.wait('@signin');
cy.get('[data-cy-signin]').click();
cy.get('[data-cy-signin-username] input').type('alice');
// Enterキーでサインインできるかの確認も兼ねる
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.wait('@signin');
});
});
it('note', () => {
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-username] input').type('alice');
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.wait('@signin').as('signinEnd');
});
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() { it('suspend', function() {
cy.request('POST', '/api/admin/suspend-user', {
i: this.admin.token,
userId: this.alice.id,
});
cy.visit('/');
cy.get('[data-cy-signin]').click();
cy.get('[data-cy-signin-username] input').type('alice');
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
cy.contains('アカウントが凍結されています');
});
});
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!');
});
}); });