describe('After user signed in', () => {
	beforeEach(() => {
		cy.window(win => {
			win.indexedDB.deleteDatabase('keyval-store');
		});
		cy.viewport('macbook-16');
		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.request('POST', '/api/signup', {
			username: 'alice',
			password: 'alice1234',
		}).its('body').as('alice');

		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('signedIn');
	});

	afterEach(() => {
		// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
		// waitを入れることでそれを防止できる
		cy.wait(1000);
	});

  it('widget edit toggle is visible', () => {
		cy.get('.mk-widget-edit').should('be.visible');
  });

	it('widget select should be visible in edit mode', () => {
		cy.get('.mk-widget-edit').click();
		cy.get('.mk-widget-select').should('be.visible');
  });

	it('first widget should be removed', () => {
		cy.get('.mk-widget-edit').click();
		cy.get('.customize-container:first-child .remove._button').click();
		cy.get('.customize-container').should('have.length', 2);
	});

	function buildWidgetTest(widgetName) {
		it(`${widgetName} widget should get added`, () => {
			cy.get('.mk-widget-edit').click();
			cy.get('.mk-widget-select select').select(widgetName, { force: true });
			cy.get('.bg._modalBg.transparent').click({ multiple: true, force: true });
			cy.get('.mk-widget-add').click({ force: true });
			cy.get(`.mkw-${widgetName}`).should('exist');
		});
	}

	buildWidgetTest('memo');
	buildWidgetTest('notifications');
	buildWidgetTest('timeline');
	buildWidgetTest('calendar');
	buildWidgetTest('rss');
	buildWidgetTest('trends');
	buildWidgetTest('clock');
	buildWidgetTest('activity');
	buildWidgetTest('photos');
	buildWidgetTest('digitalClock');
	buildWidgetTest('federation');
	buildWidgetTest('postForm');
	buildWidgetTest('slideshow');
	buildWidgetTest('serverMetric');
	buildWidgetTest('onlineUsers');
	buildWidgetTest('jobQueue');
	buildWidgetTest('button');
	buildWidgetTest('aiscript');
	buildWidgetTest('aichan');
});