Merge branch 'main' into credential-library-create

This commit is contained in:
Susmitha Girumala authored and GitHub committed 2021-07-22 17:44:49 -04:00
commit f7dd5ebe55
7 files changed
+82 -3

No files matched your search

+1
View File
@@ -467,6 +467,7 @@ export default function () {
this.get('/credential-stores/:id');
this.post('/credential-stores');
this.patch('/credential-stores/:id');
this.del('/credential-stores/:id');
// credential-libraries
@@ -271,6 +271,8 @@ credential-store:
title: Credential Store
title_plural: Credential Stores
description: A credential stores is a collection of credentials and credential libraries.
actions:
delete: Delete Credential Store
credential-library:
title: Credential Library
title_plural: Credential Libraries
@@ -5,7 +5,7 @@
margin-bottom: sizing.rems(m);
.rose-form-fieldset-title {
@include type.type(s, bold);
@include type.type(s, semibold);
}
.rose-form-fieldset-description {
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { action } from '@ember/object';
import loading from 'ember-loading/decorator';
import { confirm } from 'core/decorators/confirm';
import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeCredentialStoresRoute extends Route {
@@ -44,4 +45,19 @@ export default class ScopesScopeCredentialStoresRoute extends Route {
credentialStore.rollbackAttributes();
if (isNew) this.transitionTo('scopes.scope.credential-stores');
}
/**
* Deletes the credential store and redirects to index
* @param {CredentialStoreModel} credentialStore
*/
@action
@loading
@confirm('questions.delete-confirm')
@notifyError(({ message }) => message, { catch: true })
@notifySuccess('notifications.delete-success')
async delete(credentialStore) {
await credentialStore.destroyRecord();
await this.replaceWith('scopes.scope.credential-stores');
this.refresh();
}
}
@@ -10,7 +10,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreRoute extends Rou
}
/**
* Render credential store header, navigation, and actions page sections.
* Render credential store header, navigation and actions page sections.
* @override
*/
renderTemplate() {
@@ -1,5 +1,5 @@
<Rose::Dropdown
@text='{{t 'actions.manage'}}'
@text={{t 'actions.manage'}}
@dropdownRight={{true}}
as |dropdown|
>
@@ -9,4 +9,12 @@
>
{{t 'resources.credential-library.actions.create'}}
</dropdown.link>
<dropdown.separator />
<dropdown.button
@style='danger'
@disabled={{@model.canSave}}
{{on 'click' (route-action 'delete' @model)}}
>
{{t 'resources.credential-store.actions.delete'}}
</dropdown.button>
</Rose::Dropdown>
@@ -5,6 +5,8 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import a11yAudit from 'ember-a11y-testing/test-support/audit';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { Response } from 'miragejs';
import { resolve, reject } from 'rsvp';
import sinon from 'sinon';
module('Acceptance | credential-stores', function (hooks) {
setupApplicationTest(hooks);
@@ -236,4 +238,54 @@ module('Acceptance | credential-stores', function (hooks) {
);
}
});
test('can delete credential store', async function (assert) {
assert.expect(1);
const count = getCredentialStoresCount();
await visit(urls.credentialStore);
await click('.rose-layout-page-actions .rose-dropdown-button-danger');
assert.equal(getCredentialStoresCount(), count - 1);
});
test('can accept delete credential store via dialog', async function (assert) {
assert.expect(2);
const confirmService = this.owner.lookup('service:confirm');
confirmService.enabled = true;
confirmService.confirm = sinon.fake.returns(resolve());
const count = getCredentialStoresCount();
await visit(urls.credentialStore);
await click('.rose-layout-page-actions .rose-dropdown-button-danger');
assert.equal(getCredentialStoresCount(), count - 1);
assert.ok(confirmService.confirm.calledOnce);
});
test('cannot cancel delete credential store via dialog', async function (assert) {
assert.expect(2);
const confirmService = this.owner.lookup('service:confirm');
confirmService.enabled = true;
confirmService.confirm = sinon.fake.returns(reject());
const count = getCredentialStoresCount();
await visit(urls.credentialStore);
await click('.rose-layout-page-actions .rose-dropdown-button-danger');
assert.equal(getCredentialStoresCount(), count);
assert.ok(confirmService.confirm.calledOnce);
});
test('deleting a credential store which errors displays error messages', async function (assert) {
assert.expect(1);
this.server.del('/credential-stores/:id', () => {
return new Response(
490,
{},
{
status: 490,
code: 'error',
message: 'Oops.',
}
);
});
await visit(urls.credentialStore);
await click('.rose-layout-page-actions .rose-dropdown-button-danger');
assert.ok(find('[role="alert"]').textContent.trim(), 'Oops.');
});
});