diff --git a/app/components/identity/blocked.hbs b/app/components/identity/blocked.hbs new file mode 100644 index 00000000..1a3d68fe --- /dev/null +++ b/app/components/identity/blocked.hbs @@ -0,0 +1,8 @@ +
Status Blocked
+
The system failed to link + your profile service with the Identity service, + Please try again!
+ \ No newline at end of file diff --git a/app/components/identity/verified.hbs b/app/components/identity/verified.hbs new file mode 100644 index 00000000..ebad1442 --- /dev/null +++ b/app/components/identity/verified.hbs @@ -0,0 +1,6 @@ +
Verified
+
Congratulations!!! + You did it, go ahead and tell in the community that you verified your profile + service.
\ No newline at end of file diff --git a/app/templates/identity.hbs b/app/templates/identity.hbs index a9511781..ebe9143f 100644 --- a/app/templates/identity.hbs +++ b/app/templates/identity.hbs @@ -25,6 +25,8 @@ {{else if (eq this.state 'reload')}} + {{else if (eq this.state 'verified')}} + {{/if}} diff --git a/tests/integration/components/identity/blocked.js b/tests/integration/components/identity/blocked.js new file mode 100644 index 00000000..83b9051c --- /dev/null +++ b/tests/integration/components/identity/blocked.js @@ -0,0 +1,26 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render, click } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/blocked', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the initial state correctly', async function (assert) { + await render(hbs``); + + assert.dom('[data-test-blocked-heading]').hasText('Status Blocked'); + assert.dom('[data-test-blocked-desc]').exists(); + assert.dom('[data-test-blocked-button]').hasText('Retry'); + }); + + test('it handles retry button click', async function (assert) { + let retryClicked = false; + this.set('setState', () => (retryClicked = true)); + await render(hbs``); + + await click('[data-test-blocked-button]'); + + assert.true(retryClicked, 'Retry button should trigger setState'); + }); +}); diff --git a/tests/integration/components/identity/get-started.js b/tests/integration/components/identity/get-started.js new file mode 100644 index 00000000..05de06db --- /dev/null +++ b/tests/integration/components/identity/get-started.js @@ -0,0 +1,52 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render, click } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/get-started', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the get started component correctly', async function (assert) { + this.set('setState', () => {}); + await render(hbs` + + `); + + assert.dom('[data-test-getStarted-heading]').exists(); + assert + .dom('[data-test-getStarted-heading]') + .hasText('Qualification Criteria'); + + assert.dom('[data-test-getStarted-desc]').exists(); + assert + .dom('[data-test-getStarted-desc]') + .containsText('To update your profile details'); + assert + .dom('[data-test-getStarted-desc] a') + .hasAttribute( + 'href', + 'https://github.com/Real-Dev-Squad/sample-profile-service', + ); + + assert.dom('[data-test-getStarted-button]').exists(); + assert.dom('[data-test-getStarted-button]').hasText('Get Started'); + }); + + test('clicking get started button triggers setState action with step1', async function (assert) { + assert.expect(1); + + this.set('setState', (state) => { + assert.strictEqual( + state, + 'step1', + 'setState action is called with step1', + ); + }); + + await render(hbs` + + `); + + await click('[data-test-getStarted-button]'); + }); +}); diff --git a/tests/integration/components/identity/step1.js b/tests/integration/components/identity/step1.js new file mode 100644 index 00000000..197c5b4b --- /dev/null +++ b/tests/integration/components/identity/step1.js @@ -0,0 +1,71 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render, click, waitFor } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/step1', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the initial state correctly', async function (assert) { + this.set('setState', () => {}); + await render(hbs``); + + assert + .dom('[data-test-step1-heading]') + .hasText('Step 1: Chaincode Generation'); + assert.dom('[data-test-step1-desc]').exists(); + assert.dom('[data-test-step1-button]').hasText('Generate Chaincode'); + assert.dom('[data-test-step1-next-button]').doesNotExist(); + }); + + test('it handles chaincode generation', async function (assert) { + this.set('setState', () => {}); + await render(hbs``); + + await click('[data-test-step1-button]'); + await waitFor('.identity-chaincode-box'); + + assert.dom('[data-test-step1-chaincode]').hasText('********************'); + assert.dom('[data-test-step1-next-button]').exists(); + assert.dom('[data-test-step1-button]').doesNotExist(); + }); + + test('it toggles chaincode visibility', async function (assert) { + this.set('setState', () => {}); + await render(hbs``); + + await click('[data-test-step1-button]'); + await waitFor('.identity-chaincode-box'); + + const initialText = await document + .querySelector('[data-test-step1-chaincode]') + .textContent.trim(); + await click('[data-test-step1-eye]'); + const visibleText = await document + .querySelector('[data-test-step1-chaincode]') + .textContent.trim(); + + assert.notEqual( + initialText, + visibleText, + 'Chaincode visibility should toggle', + ); + assert.notEqual( + visibleText, + '********************', + 'Chaincode should be visible', + ); + }); + + test('it handles next button click', async function (assert) { + let nextClicked = false; + this.set('setState', () => (nextClicked = true)); + await render(hbs``); + + await click('[data-test-step1-button]'); + await waitFor('[data-test-step1-next-button]'); + await click('[data-test-step1-next-button]'); + + assert.true(nextClicked, 'Next button should trigger setState'); + }); +}); diff --git a/tests/integration/components/identity/step2.js b/tests/integration/components/identity/step2.js new file mode 100644 index 00000000..68b90ad6 --- /dev/null +++ b/tests/integration/components/identity/step2.js @@ -0,0 +1,74 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render, click, fillIn } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/step2', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the initial state correctly', async function (assert) { + this.set('setState', () => {}); + this.set('profileURL', ''); + await render( + hbs``, + ); + + assert + .dom('[data-test-step2-heading]') + .hasText('Step 2: Profile Service URL'); + assert.dom('[data-test-step2-desc]').exists(); + assert.dom('[data-test-step2-input]').exists(); + assert.dom('[data-test-step2-next-button]').doesNotExist(); + }); + + test('it shows next button when URL is entered', async function (assert) { + this.set('setState', () => {}); + this.set('profileURL', ''); + await render( + hbs``, + ); + + assert.dom('[data-test-step2-next-button]').doesNotExist(); + + await fillIn('[data-test-step2-input]', 'https://my-profile-service.com'); + + assert.dom('[data-test-step2-next-button]').exists(); + assert.dom('[data-test-step2-next-button]').hasText('Next'); + }); + + test('it handles next button click and shows loader', async function (assert) { + let nextClicked = false; + this.set('setState', () => (nextClicked = true)); + this.set('profileURL', ''); + await render( + hbs``, + ); + + await fillIn('[data-test-step2-input]', 'https://my-profile-service.com'); + await click('[data-test-step2-next-button]'); + + assert.true(nextClicked, 'Next button should trigger setState'); + }); + + test('it shows loader while saving URL', async function (assert) { + this.set('setState', () => {}); + this.set('savingURL', true); + this.set('profileURL', ''); + await render(hbs` + `); + + await fillIn('[data-test-step2-input]', 'https://my-profile-service.com'); + + assert.dom('.loader').exists('Loader should be visible when saving'); + assert + .dom('[data-test-step2-next-button]') + .doesNotContainText( + 'Next', + 'Next text should not be visible while loading', + ); + }); +}); diff --git a/tests/integration/components/identity/step3.js b/tests/integration/components/identity/step3.js new file mode 100644 index 00000000..2357d921 --- /dev/null +++ b/tests/integration/components/identity/step3.js @@ -0,0 +1,41 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render, click } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/step3', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the initial state correctly', async function (assert) { + await render(hbs``); + + assert + .dom('[data-test-step3-heading]') + .hasText('Step 3: Link Profile Service'); + assert.dom('[data-test-step3-desc]').exists(); + assert.dom('[data-test-step3-button]').hasText('Link'); + }); + + test('it shows loader while linking', async function (assert) { + this.set('linking', true); + await render(hbs``); + + assert.dom('.loader').exists('Loader should be visible when linking'); + assert + .dom('[data-test-step3-button]') + .doesNotContainText( + 'Link', + 'Link text should not be visible while loading', + ); + }); + + test('it handles link button click', async function (assert) { + let linkClicked = false; + this.set('handleLink', () => (linkClicked = true)); + await render(hbs``); + + await click('[data-test-step3-button]'); + + assert.true(linkClicked, 'Link button should trigger handleLink action'); + }); +}); diff --git a/tests/integration/components/identity/verified.js b/tests/integration/components/identity/verified.js new file mode 100644 index 00000000..da908c34 --- /dev/null +++ b/tests/integration/components/identity/verified.js @@ -0,0 +1,19 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'website-www/tests/helpers'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | identity/verified', function (hooks) { + setupRenderingTest(hooks); + + test('it renders the success message correctly', async function (assert) { + await render(hbs``); + + assert.dom('[data-test-verified-heading]').hasText('Verified'); + assert.dom('[data-test-verified-desc]').exists(); + assert + .dom('[data-test-verified-desc] span') + .hasClass('identity-box-desc-bold'); + assert.dom('[data-test-verified-desc] span').hasText('Congratulations!!!'); + }); +});