Skip to content

Commit fb0177e

Browse files
authored
Merge pull request #10343 from Turbo87/delete-button
Add "Delete this crate" button to the crate settings page
2 parents 9a6d16f + 25de7fa commit fb0177e

File tree

4 files changed

+95
-0
lines changed

4 files changed

+95
-0
lines changed

app/styles/crate/settings.module.css

+4
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,7 @@
4848
.remove-button {
4949
composes: small yellow-button from '../shared/buttons.module.css';
5050
}
51+
52+
.delete-button {
53+
composes: red-button from '../shared/buttons.module.css';
54+
}

app/templates/crate/settings.hbs

+8
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,11 @@
5050
</div>
5151
{{/each}}
5252
</div>
53+
54+
<h2>Danger Zone</h2>
55+
56+
<div>
57+
<LinkTo @route="crate.delete" local-class="delete-button" data-test-delete-button>
58+
Delete this crate
59+
</LinkTo>
60+
</div>

e2e/acceptance/crate-deletion.spec.ts

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { expect, test } from '@/e2e/helper';
2+
3+
test.describe('Acceptance | crate deletion', { tag: '@acceptance' }, () => {
4+
test('happy path', async ({ page, mirage }) => {
5+
await mirage.addHook(server => {
6+
let user = server.create('user');
7+
authenticateAs(user);
8+
9+
let crate = server.create('crate', { name: 'foo' });
10+
server.create('version', { crate });
11+
server.create('crate-ownership', { crate, user });
12+
});
13+
14+
await page.goto('/crates/foo');
15+
await expect(page).toHaveURL('/crates/foo');
16+
await expect(page.locator('[data-test-settings-tab] a')).toBeVisible();
17+
18+
await page.click('[data-test-settings-tab] a');
19+
await expect(page).toHaveURL('/crates/foo/settings');
20+
await expect(page.locator('[data-test-delete-button]')).toBeVisible();
21+
22+
await page.click('[data-test-delete-button]');
23+
await expect(page).toHaveURL('/crates/foo/delete');
24+
await expect(page.locator('[data-test-title]')).toHaveText('Delete the foo crate?');
25+
await expect(page.locator('[data-test-delete-button]')).toBeDisabled();
26+
27+
await page.click('[data-test-confirmation-checkbox]');
28+
await expect(page.locator('[data-test-delete-button]')).toBeEnabled();
29+
30+
await page.click('[data-test-delete-button]');
31+
await expect(page).toHaveURL('/');
32+
33+
let message = 'Crate foo has been successfully deleted.';
34+
await expect(page.locator('[data-test-notification-message="success"]')).toHaveText(message);
35+
36+
let crate = await page.evaluate(() => server.schema.crates.findBy({ name: 'foo' }));
37+
expect(crate).toBeNull();
38+
});
39+
});
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { click, currentURL } from '@ember/test-helpers';
2+
import { module, test } from 'qunit';
3+
4+
import { setupApplicationTest } from 'crates-io/tests/helpers';
5+
6+
import { visit } from '../helpers/visit-ignoring-abort';
7+
8+
module('Acceptance | crate deletion', function (hooks) {
9+
setupApplicationTest(hooks);
10+
11+
test('happy path', async function (assert) {
12+
let user = this.server.create('user');
13+
this.authenticateAs(user);
14+
15+
let crate = this.server.create('crate', { name: 'foo' });
16+
this.server.create('version', { crate });
17+
this.server.create('crate-ownership', { crate, user });
18+
19+
await visit('/crates/foo');
20+
assert.strictEqual(currentURL(), '/crates/foo');
21+
assert.dom('[data-test-settings-tab] a').exists();
22+
23+
await click('[data-test-settings-tab] a');
24+
assert.strictEqual(currentURL(), '/crates/foo/settings');
25+
assert.dom('[data-test-delete-button]').exists();
26+
27+
await click('[data-test-delete-button]');
28+
assert.strictEqual(currentURL(), '/crates/foo/delete');
29+
assert.dom('[data-test-title]').hasText('Delete the foo crate?');
30+
assert.dom('[data-test-delete-button]').isDisabled();
31+
32+
await click('[data-test-confirmation-checkbox]');
33+
assert.dom('[data-test-delete-button]').isEnabled();
34+
35+
await click('[data-test-delete-button]');
36+
assert.strictEqual(currentURL(), '/');
37+
38+
let message = 'Crate foo has been successfully deleted.';
39+
assert.dom('[data-test-notification-message="success"]').hasText(message);
40+
41+
crate = this.server.schema.crates.findBy({ name: 'foo' });
42+
assert.strictEqual(crate, null);
43+
});
44+
});

0 commit comments

Comments
 (0)