import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { fillIn, find, render, waitUntil } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';
import { WorkflowSession } from '@cardstack/web-client/models/workflow';
import { Response as MirageResponse } from 'ember-cli-mirage';
import { setupMirage } from 'ember-cli-mirage/test-support';
import { MirageTestContext } from 'ember-cli-mirage/test-support';
interface Context extends MirageTestContext {}
module(
'Integration | Component | card-space/edit-details/url',
function (hooks) {
setupRenderingTest(hooks);
setupMirage(hooks);
test('it validates good input', async function (this: Context, assert) {
this.server.post('/card-spaces/validate-url', function () {
return new MirageResponse(200, {}, { errors: [] });
});
this.set('workflowSession', new WorkflowSession());
await render(hbs`
`);
await fillIn('[data-test-card-space-url-field] input', 'satoshi');
await waitUntil(
() =>
(find('[data-test-validation-state-input]') as HTMLElement).dataset
.testValidationStateInput !== 'initial'
);
assert
.dom('[data-test-validation-state-input]')
.hasAttribute('data-test-validation-state-input', 'valid');
});
test('it validates bad input', async function (this: Context, assert) {
this.server.post('/card-spaces/validate-url', function () {
return new MirageResponse(
200,
{},
{ errors: [{ detail: 'Already exists' }] }
);
});
this.set('workflowSession', new WorkflowSession());
await render(hbs`
`);
await fillIn('[data-test-card-space-url-field] input', 'satoshi');
await waitUntil(
() =>
(find('[data-test-validation-state-input]') as HTMLElement).dataset
.testValidationStateInput !== 'initial'
);
assert
.dom('[data-test-validation-state-input]')
.hasAttribute('data-test-validation-state-input', 'invalid');
assert
.dom(
`[data-test-card-space-url-field] [data-test-boxel-input-error-message]`
)
.containsText('Already exists');
});
test('it restores input from session', async function (this: Context, assert) {
let workflowSession = new WorkflowSession();
this.set('workflowSession', workflowSession);
workflowSession.setValue('url', 'satoshi');
await render(hbs`
`);
assert.dom('[data-test-card-space-url-field] input').hasValue('satoshi');
});
}
);