From 4233715679a518785c3fb11d9e3d01adf133ba7f Mon Sep 17 00:00:00 2001 From: Carmine Di Monaco Date: Tue, 16 Jul 2024 14:50:15 +0200 Subject: [PATCH] Change suse_credentials endpoint to suse_manager under settings --- assets/js/lib/api/softwareUpdatesSettings.js | 11 +++-- assets/js/state/sagas/hosts.test.js | 2 +- .../sagas/softwareUpdatesSettings.test.js | 26 +++++------- .../controllers/v1/settings_controller.ex | 6 +-- lib/trento_web/router.ex | 11 +++++ lib/trento_web/views/v1/settings_view.ex | 2 +- test/e2e/cypress/e2e/settings.cy.js | 34 +++++++--------- test/e2e/cypress/support/commands.js | 4 +- .../v1/settings_controller_test.exs | 40 +++++++++---------- .../views/v1/settings_view_test.exs | 4 +- 10 files changed, 71 insertions(+), 69 deletions(-) diff --git a/assets/js/lib/api/softwareUpdatesSettings.js b/assets/js/lib/api/softwareUpdatesSettings.js index 80c0115b65..6f23049bfa 100644 --- a/assets/js/lib/api/softwareUpdatesSettings.js +++ b/assets/js/lib/api/softwareUpdatesSettings.js @@ -1,16 +1,15 @@ import { networkClient } from '@lib/network'; -export const getSettings = () => - networkClient.get(`/settings/suma_credentials`); +export const getSettings = () => networkClient.get(`/settings/suse_manager`); export const saveSettings = (settings) => - networkClient.post(`/settings/suma_credentials`, settings); + networkClient.post(`/settings/suse_manager`, settings); export const updateSettings = (settings) => - networkClient.patch(`/settings/suma_credentials`, settings); + networkClient.patch(`/settings/suse_manager`, settings); export const clearSettings = () => - networkClient.delete(`/settings/suma_credentials`); + networkClient.delete(`/settings/suse_manager`); export const testConnection = () => - networkClient.post(`/settings/suma_credentials/test`); + networkClient.post(`/settings/suse_manager/test`); diff --git a/assets/js/state/sagas/hosts.test.js b/assets/js/state/sagas/hosts.test.js index 44d78474fb..da69ecc855 100644 --- a/assets/js/state/sagas/hosts.test.js +++ b/assets/js/state/sagas/hosts.test.js @@ -187,7 +187,7 @@ describe('Hosts sagas', () => { const settingsResponse = softwareUpdatesSettingsFactory.build(); - axiosMock.onGet('/settings/suma_credentials').reply(200, settingsResponse); + axiosMock.onGet('/settings/suse_manager').reply(200, settingsResponse); const softwareUpdatesResponse = { relevant_patches: [ diff --git a/assets/js/state/sagas/softwareUpdatesSettings.test.js b/assets/js/state/sagas/softwareUpdatesSettings.test.js index ad7b0133c3..f6b557803c 100644 --- a/assets/js/state/sagas/softwareUpdatesSettings.test.js +++ b/assets/js/state/sagas/softwareUpdatesSettings.test.js @@ -31,9 +31,7 @@ describe('Software Updates Settings saga', () => { const axiosMock = new MockAdapter(networkClient); const successfulResponse = softwareUpdatesSettingsFactory.build(); - axiosMock - .onGet('/settings/suma_credentials') - .reply(200, successfulResponse); + axiosMock.onGet('/settings/suse_manager').reply(200, successfulResponse); const dispatched = await recordSaga(fetchSoftwareUpdatesSettings); @@ -46,7 +44,7 @@ describe('Software Updates Settings saga', () => { it('should empty software updates settings when no configured settings were found', async () => { const axiosMock = new MockAdapter(networkClient); - axiosMock.onGet('/settings/suma_credentials').reply(404); + axiosMock.onGet('/settings/suse_manager').reply(404); const dispatched = await recordSaga(fetchSoftwareUpdatesSettings); @@ -60,7 +58,7 @@ describe('Software Updates Settings saga', () => { 'should empty software updates settings and put a network error flag on failed fetching', async (status) => { const axiosMock = new MockAdapter(networkClient); - axiosMock.onGet('/settings/suma_credentials').reply(status); + axiosMock.onGet('/settings/suse_manager').reply(status); const dispatched = await recordSaga(fetchSoftwareUpdatesSettings); @@ -89,9 +87,7 @@ describe('Software Updates Settings saga', () => { ca_uploaded_at: caUploadedAt, }); - axiosMock - .onPost('/settings/suma_credentials') - .reply(201, successfulResponse); + axiosMock.onPost('/settings/suse_manager').reply(201, successfulResponse); const dispatched = await recordSaga(saveSoftwareUpdatesSettings, { payload, @@ -126,7 +122,7 @@ describe('Software Updates Settings saga', () => { }, ]; - axiosMock.onPost('/settings/suma_credentials', payload).reply(422, { + axiosMock.onPost('/settings/suse_manager', payload).reply(422, { errors, }); @@ -158,7 +154,7 @@ describe('Software Updates Settings saga', () => { }); axiosMock - .onPatch('/settings/suma_credentials') + .onPatch('/settings/suse_manager') .reply(200, successfulResponse); const dispatched = await recordSaga( @@ -200,7 +196,7 @@ describe('Software Updates Settings saga', () => { }, ]; - axiosMock.onPatch('/settings/suma_credentials', payload).reply(422, { + axiosMock.onPatch('/settings/suse_manager', payload).reply(422, { errors, }); @@ -219,7 +215,7 @@ describe('Software Updates Settings saga', () => { it('should successfully clear software updates settings', async () => { const axiosMock = new MockAdapter(networkClient); - axiosMock.onDelete('/settings/suma_credentials').reply(204); + axiosMock.onDelete('/settings/suse_manager').reply(204); const dispatched = await recordSaga(clearSoftwareUpdatesSettings); @@ -236,7 +232,7 @@ describe('Software Updates Settings saga', () => { { detail: 'Something went wrong.', title: 'Internal Server Error' }, ]; - axiosMock.onDelete('/settings/suma_credentials').reply(500, { + axiosMock.onDelete('/settings/suse_manager').reply(500, { errors, }); @@ -253,7 +249,7 @@ describe('Software Updates Settings saga', () => { it('should notify on successful connection test', async () => { const axiosMock = new MockAdapter(networkClient); - axiosMock.onPost('/settings/suma_credentials/test').reply(200); + axiosMock.onPost('/settings/suse_manager/test').reply(200); const dispatched = await recordSaga(testSoftwareUpdatesConnection); @@ -269,7 +265,7 @@ describe('Software Updates Settings saga', () => { async (errorStatus) => { const axiosMock = new MockAdapter(networkClient); - axiosMock.onPost('/settings/suma_credentials/test').reply(errorStatus); + axiosMock.onPost('/settings/suse_manager/test').reply(errorStatus); const dispatched = await recordSaga(testSoftwareUpdatesConnection); diff --git a/lib/trento_web/controllers/v1/settings_controller.ex b/lib/trento_web/controllers/v1/settings_controller.ex index a474577935..7b4e21b550 100644 --- a/lib/trento_web/controllers/v1/settings_controller.ex +++ b/lib/trento_web/controllers/v1/settings_controller.ex @@ -163,7 +163,7 @@ defmodule TrentoWeb.V1.SettingsController do @spec get_suse_manager_settings(Plug.Conn.t(), any) :: Plug.Conn.t() def get_suse_manager_settings(conn, _) do with {:ok, settings} <- Settings.get_suse_manager_settings() do - render(conn, "suma_credentials.json", %{settings: settings}) + render(conn, "suse_manager.json", %{settings: settings}) end end @@ -187,7 +187,7 @@ defmodule TrentoWeb.V1.SettingsController do with {:ok, saved_settings} <- Settings.save_suse_manager_settings(settings_params) do conn |> put_status(:created) - |> render("suma_credentials.json", %{settings: saved_settings}) + |> render("suse_manager.json", %{settings: saved_settings}) end end @@ -211,7 +211,7 @@ defmodule TrentoWeb.V1.SettingsController do with {:ok, saved_settings} <- Settings.change_suse_manager_settings(update_settings_paylod) do conn |> put_status(:ok) - |> render("suma_credentials.json", %{settings: saved_settings}) + |> render("suse_manager.json", %{settings: saved_settings}) end end diff --git a/lib/trento_web/router.ex b/lib/trento_web/router.ex index 5f64f8ed3e..e8699760f3 100644 --- a/lib/trento_web/router.ex +++ b/lib/trento_web/router.ex @@ -183,10 +183,21 @@ defmodule TrentoWeb.Router do get "/activity_log", SettingsController, :get_activity_log_settings if Application.compile_env!(:trento, :suse_manager_enabled) do + scope "/suse_manager" do + get "/", SettingsController, :get_suse_manager_settings + post "/", SettingsController, :save_suse_manager_settings + patch "/", SettingsController, :update_suse_manager_settings + put "/", SettingsController, :update_suse_manager_settings + delete "/", SettingsController, :delete_suse_manager_settings + post "/test", SettingsController, :test_suse_manager_settings + end + + # deprecated scope "/suma_credentials" do get "/", SettingsController, :get_suse_manager_settings post "/", SettingsController, :save_suse_manager_settings patch "/", SettingsController, :update_suse_manager_settings + put "/", SettingsController, :update_suse_manager_settings delete "/", SettingsController, :delete_suse_manager_settings post "/test", SettingsController, :test_suse_manager_settings end diff --git a/lib/trento_web/views/v1/settings_view.ex b/lib/trento_web/views/v1/settings_view.ex index f8d4a781e9..a1403c7305 100644 --- a/lib/trento_web/views/v1/settings_view.ex +++ b/lib/trento_web/views/v1/settings_view.ex @@ -39,7 +39,7 @@ defmodule TrentoWeb.V1.SettingsView do } end - def render("suma_credentials.json", %{ + def render("suse_manager.json", %{ settings: %{ url: url, username: username, diff --git a/test/e2e/cypress/e2e/settings.cy.js b/test/e2e/cypress/e2e/settings.cy.js index df4e2dc20d..c028731ff1 100644 --- a/test/e2e/cypress/e2e/settings.cy.js +++ b/test/e2e/cypress/e2e/settings.cy.js @@ -76,7 +76,7 @@ context('Settings page', () => { }); }); - describe('SUMA Credentials Management', () => { + describe('Suse Manager Settings Management', () => { const URL_INPUT = 'suma-url-input'; const CA_CERT_INPUT = 'suma-cacert-input'; const USERNAME_INPUT = 'suma-username-input'; @@ -199,7 +199,7 @@ context('Settings page', () => { before(() => { cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( + cy.intercept('GET', '/api/v1/settings/suse_manager').as( 'getSettings' ); cy.wait('@getSettings'); @@ -213,7 +213,7 @@ context('Settings page', () => { cy.get(`[name="${name}"]`).type(value, { delay: 0 }); }); - cy.intercept('POST', '/api/v1/settings/suma_credentials').as( + cy.intercept('POST', '/api/v1/settings/suse_manager').as( 'saveSettings' ); cy.get('button').contains('Save Settings').click(); @@ -272,7 +272,7 @@ context('Settings page', () => { cy.get(`[name="${name}"]`).type(value, { delay: 0 }); }); - cy.intercept('POST', '/api/v1/settings/suma_credentials').as( + cy.intercept('POST', '/api/v1/settings/suse_manager').as( 'saveSettings' ); cy.get('button').contains('Save Settings').click(); @@ -318,7 +318,7 @@ context('Settings page', () => { it(`should show settings edit form. Scenario: ${name}`, () => { cy.saveSUMASettings(settings); cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( + cy.intercept('GET', '/api/v1/settings/suse_manager').as( 'getSettings' ); cy.wait('@getSettings'); @@ -410,7 +410,7 @@ context('Settings page', () => { }; cy.saveSUMASettings(initialSettings); cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( + cy.intercept('GET', '/api/v1/settings/suse_manager').as( 'getSettings' ); cy.wait('@getSettings'); @@ -425,7 +425,7 @@ context('Settings page', () => { newValues.forEach(({ name, value }) => { cy.get(`[name="${name}"]`).clear().type(value, { delay: 0 }); }); - cy.intercept('PATCH', '/api/v1/settings/suma_credentials').as( + cy.intercept('PATCH', '/api/v1/settings/suse_manager').as( 'changeSettings' ); cy.get('button').contains('Save Settings').click(); @@ -534,7 +534,7 @@ context('Settings page', () => { it(`should change settings: ${name}`, () => { cy.saveSUMASettings(initialSettings); cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( + cy.intercept('GET', '/api/v1/settings/suse_manager').as( 'getSettings' ); cy.wait('@getSettings'); @@ -549,7 +549,7 @@ context('Settings page', () => { newValues.forEach(({ name, value }) => { cy.get(`[name="${name}"]`).clear().type(value, { delay: 0 }); }); - cy.intercept('PATCH', '/api/v1/settings/suma_credentials').as( + cy.intercept('PATCH', '/api/v1/settings/suse_manager').as( 'changeSettings' ); cy.get('button').contains('Save Settings').click(); @@ -583,9 +583,7 @@ context('Settings page', () => { ca_cert: validCertificate, }); cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( - 'getSettings' - ); + cy.intercept('GET', '/api/v1/settings/suse_manager').as('getSettings'); cy.wait('@getSettings'); cy.get('[aria-label="suma-url"]').should('contain', sumaUrl); @@ -596,7 +594,7 @@ context('Settings page', () => { cy.get('[aria-label="suma-username"]').should('contain', sumaUsername); cy.get('[aria-label="suma-password"]').should('contain', '•••••'); - cy.intercept('DELETE', '/api/v1/settings/suma_credentials').as( + cy.intercept('DELETE', '/api/v1/settings/suse_manager').as( 'deleteSUMASettings' ); cy.get('[aria-label="clear-suma-settings"]').click(); @@ -613,9 +611,7 @@ context('Settings page', () => { cy.clearSUMASettings(); cy.reload(); - cy.intercept('GET', '/api/v1/settings/suma_credentials').as( - 'getSettings' - ); + cy.intercept('GET', '/api/v1/settings/suse_manager').as('getSettings'); cy.wait('@getSettings'); cy.get('[aria-label="suma-url"]').should('have.text', 'https://'); @@ -623,7 +619,7 @@ context('Settings page', () => { cy.get('[aria-label="suma-username"]').should('contain', '.....'); cy.get('[aria-label="suma-password"]').should('contain', '.....'); - cy.intercept('DELETE', '/api/v1/settings/suma_credentials').as( + cy.intercept('DELETE', '/api/v1/settings/suse_manager').as( 'deleteSUMASettings' ); cy.get('[aria-label="clear-suma-settings"]').click(); @@ -657,7 +653,7 @@ context('Settings page', () => { }); it('should succeed', () => { - cy.intercept('POST', '/api/v1/settings/suma_credentials/test', { + cy.intercept('POST', '/api/v1/settings/suse_manager/test', { statusCode: 200, }).as('testConnection'); @@ -667,7 +663,7 @@ context('Settings page', () => { }); it('should fail', () => { - cy.intercept('POST', '/api/v1/settings/suma_credentials/test', { + cy.intercept('POST', '/api/v1/settings/suse_manager/test', { statusCode: 422, }).as('testConnection'); diff --git a/test/e2e/cypress/support/commands.js b/test/e2e/cypress/support/commands.js index 6e9f860276..c1032696ca 100644 --- a/test/e2e/cypress/support/commands.js +++ b/test/e2e/cypress/support/commands.js @@ -249,7 +249,7 @@ Cypress.Commands.add( ({ url, username, password, ca_cert }) => cy.apiLogin().then(({ accessToken }) => cy.request({ - url: '/api/v1/settings/suma_credentials', + url: '/api/v1/settings/suse_manager', method: 'POST', auth: { bearer: accessToken, @@ -267,7 +267,7 @@ Cypress.Commands.add( Cypress.Commands.add('clearSUMASettings', () => cy.apiLogin().then(({ accessToken }) => cy.request({ - url: '/api/v1/settings/suma_credentials', + url: '/api/v1/settings/suse_manager', method: 'DELETE', auth: { bearer: accessToken, diff --git a/test/trento_web/controllers/v1/settings_controller_test.exs b/test/trento_web/controllers/v1/settings_controller_test.exs index 264e43ac88..bf8957fdab 100644 --- a/test/trento_web/controllers/v1/settings_controller_test.exs +++ b/test/trento_web/controllers/v1/settings_controller_test.exs @@ -185,7 +185,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do api_spec = ApiSpec.spec() conn - |> get("/api/v1/settings/suma_credentials") + |> get("/api/v1/settings/suse_manager") |> json_response(:ok) |> assert_schema("SuseManagerSettings", api_spec) end @@ -194,7 +194,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do api_spec = ApiSpec.spec() conn - |> get("/api/v1/settings/suma_credentials") + |> get("/api/v1/settings/suse_manager") |> json_response(:not_found) |> assert_schema("NotFound", api_spec) end @@ -212,7 +212,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials", settings) + |> post("/api/v1/settings/suse_manager", settings) |> json_response(:created) assert %{"url" => ^url, "username" => ^username} = resp @@ -230,7 +230,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials", settings) + |> post("/api/v1/settings/suse_manager", settings) |> json_response(:unprocessable_entity) assert %{ @@ -248,7 +248,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials", nil) + |> post("/api/v1/settings/suse_manager", nil) |> json_response(:unprocessable_entity) assert %{ @@ -285,7 +285,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials", new_settings) + |> post("/api/v1/settings/suse_manager", new_settings) |> json_response(:unprocessable_entity) assert %{ @@ -307,7 +307,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials", settings) + |> post("/api/v1/settings/suse_manager", settings) |> json_response(:unprocessable_entity) assert %{ @@ -334,7 +334,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", submission) + |> patch("/api/v1/settings/suse_manager", submission) |> json_response(:not_found) assert %{ @@ -354,7 +354,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", submission) + |> patch("/api/v1/settings/suse_manager", submission) |> json_response(:unprocessable_entity) assert %{ @@ -482,7 +482,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", change_submission) + |> patch("/api/v1/settings/suse_manager", change_submission) |> json_response(:unprocessable_entity) assert %{"errors" => errors} == resp @@ -511,7 +511,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", change_submission) + |> patch("/api/v1/settings/suse_manager", change_submission) |> json_response(:ok) assert %{ @@ -544,7 +544,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", change_submission) + |> patch("/api/v1/settings/suse_manager", change_submission) |> json_response(:ok) assert %{"url" => ^new_url, "username" => ^initial_username} = resp @@ -574,7 +574,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> patch("/api/v1/settings/suma_credentials", change_submission) + |> patch("/api/v1/settings/suse_manager", change_submission) |> json_response(:ok) assert %{ @@ -585,7 +585,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do end test "should return 204 if no user settings have previously been saved", %{conn: conn} do - conn = delete(conn, "/api/v1/settings/suma_credentials") + conn = delete(conn, "/api/v1/settings/suse_manager") assert response(conn, 204) == "" end @@ -593,7 +593,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do test "should return 204 when user settings have previously been saved", %{conn: conn} do insert_software_updates_settings() - conn = delete(conn, "/api/v1/settings/suma_credentials") + conn = delete(conn, "/api/v1/settings/suse_manager") assert response(conn, 204) == "" end @@ -610,7 +610,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials/test", %{}) + |> post("/api/v1/settings/suse_manager/test", %{}) |> json_response(:unprocessable_entity) assert %{ @@ -630,7 +630,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do resp = conn |> put_req_header("content-type", "application/json") - |> post("/api/v1/settings/suma_credentials/test") + |> post("/api/v1/settings/suse_manager/test") |> json_response(:ok) assert "" == resp @@ -700,7 +700,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do |> put_req_header("content-type", "application/json") conn - |> post("/api/v1/settings/suma_credentials", settings) + |> post("/api/v1/settings/suse_manager", settings) |> json_response(:forbidden) |> assert_schema("Forbidden", api_spec) end @@ -720,7 +720,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do |> put_req_header("content-type", "application/json") conn - |> patch("/api/v1/settings/suma_credentials", change_submission) + |> patch("/api/v1/settings/suse_manager", change_submission) |> json_response(:forbidden) |> assert_schema("Forbidden", api_spec) end @@ -738,7 +738,7 @@ defmodule TrentoWeb.V1.SettingsControllerTest do |> put_req_header("content-type", "application/json") conn - |> delete("/api/v1/settings/suma_credentials") + |> delete("/api/v1/settings/suse_manager") |> json_response(:forbidden) |> assert_schema("Forbidden", api_spec) end diff --git a/test/trento_web/views/v1/settings_view_test.exs b/test/trento_web/views/v1/settings_view_test.exs index 384636f50c..c51ce19bfd 100644 --- a/test/trento_web/views/v1/settings_view_test.exs +++ b/test/trento_web/views/v1/settings_view_test.exs @@ -5,7 +5,7 @@ defmodule TrentoWeb.V1.SettingsViewTest do alias TrentoWeb.V1.SettingsView - describe "renders suma_credentials.json" do + describe "renders suse_manager.json" do test "should render relevant fields" do %{url: url, username: username, ca_uploaded_at: ca_uploaded_at} = settings = %{ @@ -17,7 +17,7 @@ defmodule TrentoWeb.V1.SettingsViewTest do } assert %{url: url, username: username, ca_uploaded_at: ca_uploaded_at} == - render(SettingsView, "suma_credentials.json", %{settings: settings}) + render(SettingsView, "suse_manager.json", %{settings: settings}) end end end