From fcb9468c595b2a3f7ab20a0eede4c455f6b08a9b Mon Sep 17 00:00:00 2001 From: Carlos Alcaide Corvo Date: Tue, 14 May 2024 13:39:23 -0700 Subject: [PATCH] Add minio missing unit tests (#2253) * Add MinIO storage bucket creation for scope org * Add update acceptance tests --- .../form/storage-bucket/aws/index.hbs | 4 +- .../form/storage-bucket/minio/index.hbs | 4 +- .../acceptance/storage-buckets/create-test.js | 33 ++++++++++++ .../acceptance/storage-buckets/update-test.js | 50 +++++++++++++++---- 4 files changed, 78 insertions(+), 13 deletions(-) diff --git a/ui/admin/app/components/form/storage-bucket/aws/index.hbs b/ui/admin/app/components/form/storage-bucket/aws/index.hbs index 48bcab9a3..7397d762b 100644 --- a/ui/admin/app/components/form/storage-bucket/aws/index.hbs +++ b/ui/admin/app/components/form/storage-bucket/aws/index.hbs @@ -155,7 +155,7 @@ 'resources.storage-bucket.form.bucket_name.help' }} {{#if @model.errors.bucket_name}} - + {{#each @model.errors.bucket_name as |error|}} {{error.message}} {{/each}} @@ -461,7 +461,7 @@ {{#if @model.errors.worker_filter}} - + {{#each @model.errors.worker_filter as |error|}} {{error.message}} {{/each}} diff --git a/ui/admin/app/components/form/storage-bucket/minio/index.hbs b/ui/admin/app/components/form/storage-bucket/minio/index.hbs index 4e342f49c..9a3196a69 100644 --- a/ui/admin/app/components/form/storage-bucket/minio/index.hbs +++ b/ui/admin/app/components/form/storage-bucket/minio/index.hbs @@ -179,7 +179,7 @@ 'resources.storage-bucket.form.bucket_name.help' }} {{#if @model.errors.bucket_name}} - + {{#each @model.errors.bucket_name as |error|}} {{error.message}} {{/each}} @@ -326,7 +326,7 @@ {{#if @model.errors.worker_filter}} - + {{#each @model.errors.worker_filter as |error|}} {{error.message}} {{/each}} diff --git a/ui/admin/tests/acceptance/storage-buckets/create-test.js b/ui/admin/tests/acceptance/storage-buckets/create-test.js index 84fd273b7..3c03607d3 100644 --- a/ui/admin/tests/acceptance/storage-buckets/create-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/create-test.js @@ -114,6 +114,39 @@ module('Acceptance | storage-buckets | create', function (hooks) { assert.strictEqual(getStorageBucketCount(), storageBucketCount + 1); }); + test('users can create a new storage bucket minio plugin type with org scope', async function (assert) { + const storageBucketCount = getStorageBucketCount(); + + // Navigate to new storage bucket + await visit(urls.storageBuckets); + await click(`[href="${urls.newStorageBucket}"]`); + + // Fill the form + await fillIn(NAME_FIELD_SELECTOR, NAME_FIELD_TEXT); + await click(MINIO_PLUGIN_TYPE_SELECTOR); + await select(SCOPE_SELECTOR, instances.scopes.org.id); + await fillIn(ENDPOINT_URL_SELECTOR, ENDPOINT_URL_TEXT); + await fillIn(BUCKET_NAME_FIELD_SELECTOR, 'Test SB'); + await fillIn(ACCESS_KEY_SELECTOR, 'access_key_id'); + await fillIn(SECRET_KEY_SELECTOR, 'secret_access_key'); + await click(SAVE_BTN_SELECTOR); + + // Assertions + const storageBucket = this.server.schema.storageBuckets.findBy({ + name: NAME_FIELD_TEXT, + }); + assert.dom(ALERT_TEXT_SELECTOR).hasText('Saved successfully.'); + assert.strictEqual(storageBucket.name, NAME_FIELD_TEXT); + assert.strictEqual( + storageBucket.attributes.endpoint_url, + ENDPOINT_URL_TEXT, + ); + assert.strictEqual(storageBucket.attributes.role_arn, null); + assert.strictEqual(storageBucket.plugin.name, 'minio'); + assert.strictEqual(storageBucket.scopeId, instances.scopes.org.id); + assert.strictEqual(getStorageBucketCount(), storageBucketCount + 1); + }); + test('users can create a new storage bucket aws plugin type with dynamic credentials', async function (assert) { const storageBucketCount = getStorageBucketCount(); await visit(urls.storageBuckets); diff --git a/ui/admin/tests/acceptance/storage-buckets/update-test.js b/ui/admin/tests/acceptance/storage-buckets/update-test.js index c4b7089a0..253d1b4ce 100644 --- a/ui/admin/tests/acceptance/storage-buckets/update-test.js +++ b/ui/admin/tests/acceptance/storage-buckets/update-test.js @@ -8,12 +8,7 @@ import { visit, click, fillIn, findAll } from '@ember/test-helpers'; import { setupApplicationTest } from 'ember-qunit'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { Response } from 'miragejs'; -import { - authenticateSession, - // These are left here intentionally for future reference. - //currentSession, - //invalidateSession, -} from 'ember-simple-auth/test-support'; +import { authenticateSession } from 'ember-simple-auth/test-support'; module('Acceptance | storage-buckets | update', function (hooks) { setupApplicationTest(hooks); @@ -25,7 +20,6 @@ module('Acceptance | storage-buckets | update', function (hooks) { const SAVE_BUTTON_SELECTOR = '.rose-form-actions [type="submit"]'; const NAME_FIELD_SELECTOR = '[name="name"]'; const ALERT_TEXT_SELECTOR = '[role="alert"] div'; - const FIELD_ERROR_TEXT_SELECTOR = '.hds-form-error__message'; const SECRET_FIELD_BUTTON_SELECTOR = '.secret-input [type="button"]'; const ACCESS_KEY_ID_FIELD_SELECTOR = '[name="access_key_id"]'; const SECRET_ACCESS_KEY_FIELD_SELECTOR = '[name="secret_access_key"]'; @@ -35,6 +29,12 @@ module('Acceptance | storage-buckets | update', function (hooks) { const BUCKET_NAME_FIELD_SELECTOR = '[name="bucket_name"]'; const BUCKET_PREFIX_FIELD_SELECTOR = '[name="bucket_prefix"]'; const WORKER_FILTER = '[name="worker_filter"]'; + const FIELD_STORAGE_BUCKET_NAME_ERROR = '[data-test-bucket-name-error]'; + const FIELD_WORKER_FILTER_ERROR = '[data-test-worker-filter-error]'; + const FIELD_REGION = '[name=region]'; + const FIELD_PROVIDER = '[name=plugin_type]'; + const FIELD_ENDPOINT_URL = '[name=endpoint_url]'; + const FIELD_SCOPE = '[name=scope]'; const instances = { scopes: { @@ -54,9 +54,14 @@ module('Acceptance | storage-buckets | update', function (hooks) { instances.storageBucket = this.server.create('storage-bucket', { scope: instances.scopes.global, }); + instances.storageBucketMinio = this.server.create('storage-bucket', { + scope: instances.scopes.global, + plugin: { name: 'minio' }, + }); urls.globalScope = `/scopes/global`; urls.storageBuckets = `${urls.globalScope}/storage-buckets`; urls.storageBucket = `${urls.storageBuckets}/${instances.storageBucket.id}`; + urls.storageBucketMinio = `${urls.storageBuckets}/${instances.storageBucketMinio.id}`; features = this.owner.lookup('service:features'); features.enable('ssh-session-recording'); @@ -156,6 +161,10 @@ module('Acceptance | storage-buckets | update', function (hooks) { message: 'The request was invalid.', details: { request_fields: [ + { + name: 'bucket_name', + description: 'This is a required field.', + }, { name: 'worker_filter', description: 'Worker filter is required.', @@ -172,10 +181,13 @@ module('Acceptance | storage-buckets | update', function (hooks) { await click(SAVE_BUTTON_SELECTOR); assert.dom(ALERT_TEXT_SELECTOR).hasText('The request was invalid.'); - assert.dom(FIELD_ERROR_TEXT_SELECTOR).hasText('Worker filter is required.'); + assert + .dom(FIELD_STORAGE_BUCKET_NAME_ERROR) + .hasText('This is a required field.'); + assert.dom(FIELD_WORKER_FILTER_ERROR).hasText('Worker filter is required.'); }); - test('user cannot edit bucket name and bucket prefix fields in a storage bucket form', async function (assert) { + test('user cannot edit scope, provider, bucket name, bucket prefix and region fields in a Amazon S3 storage bucket form', async function (assert) { await visit(urls.storageBuckets); await click(`[href="${urls.storageBucket}"]`); @@ -185,9 +197,29 @@ module('Acceptance | storage-buckets | update', function (hooks) { await click(BUTTON_SELECTOR, 'Click edit mode'); + assert.dom(FIELD_SCOPE).doesNotExist(); + assert.dom(FIELD_PROVIDER).isDisabled(); assert.dom(BUCKET_NAME_FIELD_SELECTOR).hasAttribute('readOnly'); assert.dom(BUCKET_PREFIX_FIELD_SELECTOR).hasAttribute('readOnly'); + assert.dom(FIELD_REGION).hasAttribute('readOnly'); assert.dom(BUCKET_NAME_FIELD_SELECTOR).isNotDisabled(); assert.dom(BUCKET_PREFIX_FIELD_SELECTOR).isNotDisabled(); + assert.dom(FIELD_REGION).isNotDisabled(); + }); + + test('user cannot edit scope, provider, endpoint_url, bucket name or region fields in a MinIO storage bucket', async function (assert) { + await visit(urls.storageBuckets); + + await click(`[href="${urls.storageBucketMinio}"]`); + + assert.dom(BUCKET_NAME_FIELD_SELECTOR).isDisabled(); + + await click(BUTTON_SELECTOR, 'Click edit mode'); + + assert.dom(FIELD_SCOPE).doesNotExist(); + assert.dom(FIELD_PROVIDER).isDisabled(); + assert.dom(FIELD_ENDPOINT_URL).isNotDisabled(); + assert.dom(BUCKET_NAME_FIELD_SELECTOR).hasAttribute('readOnly'); + assert.dom(FIELD_REGION).hasAttribute('readOnly'); }); });