From f6fc766d463758409f848716d663a59a633ef701 Mon Sep 17 00:00:00 2001 From: Thomas DA ROCHA Date: Sun, 21 Jan 2024 13:32:39 +0100 Subject: [PATCH] fix: app env matching in controllers (and logo env foreign key) (#534) --- apps/lenra/lib/lenra/apps.ex | 12 ++- .../20240121000440_fix_logo_foreign_key.exs | 11 +++ .../controllers/environment_controller.ex | 25 ++++-- .../lenra_web/controllers/logo_controller.ex | 38 ++++++--- .../application_main_env_controller_test.exs | 13 ---- .../controllers/build_controller_test.exs | 18 +---- .../environment_controller_test.exs | 77 +++++++++---------- .../test/controllers/logo_controller_test.exs | 71 ++++++++++------- ...ser_environment_access_controller_test.exs | 18 +---- .../controllers/webhooks_controller_test.exs | 12 +-- apps/lenra_web/test/support/conn_case.ex | 28 ++++++- config/config.exs | 3 +- mix.lock | 4 +- 13 files changed, 189 insertions(+), 141 deletions(-) create mode 100644 apps/lenra/priv/repo/migrations/20240121000440_fix_logo_foreign_key.exs diff --git a/apps/lenra/lib/lenra/apps.ex b/apps/lenra/lib/lenra/apps.ex index f3171c56..70599a00 100644 --- a/apps/lenra/lib/lenra/apps.ex +++ b/apps/lenra/lib/lenra/apps.ex @@ -158,6 +158,16 @@ defmodule Lenra.Apps do Repo.fetch(Environment, env_id) end + def fetch_app_env(app_id, env_id) do + Environment + |> Repo.get_by(id: env_id, application_id: app_id) + |> Repo.preload(:application) + |> case do + nil -> BusinessError.no_env_found_tuple() + env -> {:ok, env} + end + end + def create_env(application_id, creator_id, params) do Ecto.Multi.new() |> Ecto.Multi.put(:inserted_application, %{id: application_id}) @@ -670,7 +680,7 @@ defmodule Lenra.Apps do |> Repo.transaction() end - defp upsert_logo(transaction, %{inserted_image: image, old_logo: old_logo} = state, %{"app_id" => app_id} = params) do + defp upsert_logo(transaction, %{inserted_image: image, old_logo: old_logo}, %{"app_id" => app_id} = params) do case old_logo do nil -> transaction.insert(Logo.new(app_id, params["env_id"], %{image_id: image.id})) diff --git a/apps/lenra/priv/repo/migrations/20240121000440_fix_logo_foreign_key.exs b/apps/lenra/priv/repo/migrations/20240121000440_fix_logo_foreign_key.exs new file mode 100644 index 00000000..cad4d50b --- /dev/null +++ b/apps/lenra/priv/repo/migrations/20240121000440_fix_logo_foreign_key.exs @@ -0,0 +1,11 @@ +defmodule Lenra.Repo.Migrations.FixLogoForeignKey do + use Ecto.Migration + + def change do + drop(constraint(:logos, "logos_environment_id_fkey")) + + alter table(:logos) do + modify(:environment_id, references(:environments, on_delete: :delete_all), null: true) + end + end +end diff --git a/apps/lenra_web/lib/lenra_web/controllers/environment_controller.ex b/apps/lenra_web/lib/lenra_web/controllers/environment_controller.ex index 7e6b15d0..2bed3b06 100644 --- a/apps/lenra_web/lib/lenra_web/controllers/environment_controller.ex +++ b/apps/lenra_web/lib/lenra_web/controllers/environment_controller.ex @@ -17,6 +17,16 @@ defmodule LenraWeb.EnvsController do end end + defp get_app_env_and_allow(conn, %{"app_id" => app_id_str, "env_id" => env_id_str}) do + with {app_id, _} <- Integer.parse(app_id_str), + {env_id, _} <- Integer.parse(env_id_str), + {:ok, env} <- Apps.fetch_app_env(app_id, env_id), + app <- Map.get(env, :application), + :ok <- allow(conn, %{app: app, env: env}) do + {:ok, app, env} + end + end + def index(conn, params) do with {:ok, app} <- get_app_and_allow(conn, params) do conn @@ -34,8 +44,7 @@ defmodule LenraWeb.EnvsController do end def update(conn, %{"env_id" => env_id, "is_public" => true} = params) do - with {:ok, app} <- get_app_and_allow(conn, params), - {:ok, env} <- Apps.fetch_env(env_id), + with {:ok, app, env} <- get_app_env_and_allow(conn, params), %Subscription{} = _subscription <- Subscriptions.get_subscription_by_app_id(app.id), {:ok, %{updated_env: env}} <- Apps.update_env(env, params) do conn @@ -47,8 +56,7 @@ defmodule LenraWeb.EnvsController do end def update(conn, %{"env_id" => env_id} = params) do - with {:ok, _app} <- get_app_and_allow(conn, params), - {:ok, env} <- Apps.fetch_env(env_id), + with {:ok, _app, env} <- get_app_env_and_allow(conn, params), {:ok, %{updated_env: env}} <- Apps.update_env(env, params) do conn |> reply(env) @@ -59,12 +67,19 @@ end defmodule LenraWeb.EnvsController.Policy do alias Lenra.Accounts.User alias Lenra.Apps.App + alias Lenra.Apps.Environment alias Lenra.Subscriptions.Subscription @impl Bouncer.Policy def authorize(:index, %User{id: user_id}, %App{creator_id: user_id}), do: true def authorize(:create, %User{id: user_id}, %App{creator_id: user_id}), do: true - def authorize(:update, %User{id: user_id}, %App{creator_id: user_id}), do: true + + def authorize(:update, %User{id: user_id}, %{ + app: %App{id: app_id, creator_id: user_id}, + env: %Environment{application_id: app_id} + }), + do: true + def authorize(:update, %App{id: app_id}, %Subscription{application_id: app_id}), do: true # credo:disable-for-next-line Credo.Check.Readability.StrictModuleLayout diff --git a/apps/lenra_web/lib/lenra_web/controllers/logo_controller.ex b/apps/lenra_web/lib/lenra_web/controllers/logo_controller.ex index 048a7d66..e805d153 100644 --- a/apps/lenra_web/lib/lenra_web/controllers/logo_controller.ex +++ b/apps/lenra_web/lib/lenra_web/controllers/logo_controller.ex @@ -6,6 +6,24 @@ defmodule LenraWeb.LogosController do alias Lenra.Apps + defp get_app_and_allow(conn, %{"app_id" => app_id_str}) do + with {app_id, _} <- Integer.parse(app_id_str), + {:ok, app} <- Apps.fetch_app(app_id), + :ok <- allow(conn, app) do + {:ok, app} + end + end + + defp get_app_env_and_allow(conn, %{"app_id" => app_id_str, "env_id" => env_id_str}) do + with {app_id, _} <- Integer.parse(app_id_str), + {env_id, _} <- Integer.parse(env_id_str), + {:ok, env} <- Apps.fetch_app_env(app_id, env_id), + app <- Map.get(env, :application), + :ok <- allow(conn, %{app: app, env: env}) do + {:ok, app, env} + end + end + def get_image_content(conn, %{"image_id" => image_id}) do {:ok, image} = Apps.fetch_image(image_id) @@ -14,22 +32,19 @@ defmodule LenraWeb.LogosController do |> Plug.Conn.send_resp(:ok, image.data) end - @spec put_logo(any(), map()) :: any() - def put_logo(conn, %{"app_id" => _app_id, "env_id" => env_id} = params) do - with {:ok, env} <- Apps.fetch_env(env_id), - :ok <- allow(conn, env), + def put_logo(conn, %{"app_id" => _app_id, "env_id" => _env_id} = params) do + with {:ok, app, env} <- get_app_env_and_allow(conn, params), user <- LenraWeb.Auth.current_resource(conn), decoded_data <- decode_data(params), {:ok, %{new_logo: logo}} <- - Apps.set_logo(user.id, Map.merge(decoded_data, %{"app_id" => env.application_id, "env_id" => env.id})) do + Apps.set_logo(user.id, Map.merge(decoded_data, %{"app_id" => app.id, "env_id" => env.id})) do conn |> reply(logo) end end - def put_logo(conn, %{"app_id" => app_id} = params) do - with {:ok, app} <- Apps.fetch_app(app_id), - :ok <- allow(conn, app), + def put_logo(conn, %{"app_id" => _app_id} = params) do + with {:ok, app} <- get_app_and_allow(conn, params), user <- LenraWeb.Auth.current_resource(conn), decoded_data <- decode_data(params), {:ok, %{new_logo: logo}} <- Apps.set_logo(user.id, Map.merge(decoded_data, %{"app_id" => app.id})) do @@ -49,9 +64,14 @@ defmodule LenraWeb.LogosController.Policy do alias Lenra.Apps.Environment @impl Bouncer.Policy - def authorize(:put_logo, %User{id: user_id}, %Environment{creator_id: user_id}), do: true def authorize(:put_logo, %User{id: user_id}, %App{creator_id: user_id}), do: true + def authorize(:put_logo, %User{id: user_id}, %{ + app: %App{id: app_id, creator_id: user_id}, + env: %Environment{application_id: app_id} + }), + do: true + # credo:disable-for-next-line Credo.Check.Readability.StrictModuleLayout use LenraWeb.Policy.Default end diff --git a/apps/lenra_web/test/controllers/application_main_env_controller_test.exs b/apps/lenra_web/test/controllers/application_main_env_controller_test.exs index 0e9f1fc7..9950c27c 100644 --- a/apps/lenra_web/test/controllers/application_main_env_controller_test.exs +++ b/apps/lenra_web/test/controllers/application_main_env_controller_test.exs @@ -8,19 +8,6 @@ defmodule LenraWeb.ApplicationMainEnvControllerTest do {:ok, conn: conn} end - def create_app(conn) do - conn = - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - - app = json_response(conn, 200) - - %{conn: conn, app: app} - end - describe "index" do test "application main env controller not authenticated", %{conn: conn} do conn = get(conn, Routes.application_main_env_path(conn, :index, 0)) diff --git a/apps/lenra_web/test/controllers/build_controller_test.exs b/apps/lenra_web/test/controllers/build_controller_test.exs index 90b12a0f..d5c7b057 100644 --- a/apps/lenra_web/test/controllers/build_controller_test.exs +++ b/apps/lenra_web/test/controllers/build_controller_test.exs @@ -8,14 +8,6 @@ defmodule LenraWeb.BuildControllerTest do {:ok, conn: conn} end - defp create_app(conn) do - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - end - defp create_build(conn, app_id) do post( conn, @@ -31,8 +23,7 @@ defmodule LenraWeb.BuildControllerTest do end defp create_app_and_build(conn!) do - conn! = create_app(conn!) - assert app = json_response(conn!, 200) + %{conn: conn!, app: app} = create_app(conn!) conn! = create_build(conn!, app["id"]) assert build = json_response(conn!, 200) @@ -91,8 +82,7 @@ defmodule LenraWeb.BuildControllerTest do describe "create" do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "build controller authenticated", %{users: [creator!, user, other_dev, admin]} do - creator! = create_app(creator!) - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) creator! = create_build(creator!, app["id"]) admin = create_build(admin, app["id"]) @@ -131,9 +121,7 @@ defmodule LenraWeb.BuildControllerTest do @tag auth_user_with_cgs: :dev test "build controller authenticated but invalid params", %{conn: conn!} do - conn! = create_app(conn!) - - assert app = json_response(conn!, 200) + %{conn: conn!, app: app} = create_app(conn!) conn! = post( diff --git a/apps/lenra_web/test/controllers/environment_controller_test.exs b/apps/lenra_web/test/controllers/environment_controller_test.exs index aa8ff5a1..0b8030f4 100644 --- a/apps/lenra_web/test/controllers/environment_controller_test.exs +++ b/apps/lenra_web/test/controllers/environment_controller_test.exs @@ -8,14 +8,6 @@ defmodule LenraWeb.EnvironmentControllerTest do {:ok, conn: conn} end - defp create_app(conn) do - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - end - describe "index" do test "environment controller not authenticated", %{conn: conn} do conn = get(conn, Routes.envs_path(conn, :index, 0)) @@ -29,9 +21,7 @@ defmodule LenraWeb.EnvironmentControllerTest do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "get environment check authorizations", %{users: [creator!, user, other_dev, admin]} do - creator! = create_app(creator!) - - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) creator! = post(creator!, Routes.envs_path(creator!, :create, app["id"]), %{ @@ -103,8 +93,29 @@ defmodule LenraWeb.EnvironmentControllerTest do describe "update" do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "environment controller authenticated", %{users: [creator!, user!, other_dev!, admin!]} do - creator! = create_app(creator!) - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) + %{conn: other_dev!, app: other_app} = create_app(other_dev!, "test2") + + [env] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) + + update_env_path = Routes.envs_path(creator!, :update, app["id"], env["id"]) + update_other_app_env_path = Routes.envs_path(other_dev!, :update, other_app["id"], env["id"]) + + public_body = %{ + "is_public" => true + } + + private_body = %{ + "is_public" => false + } + + creator! = patch(creator!, update_env_path, public_body) + + assert %{"message" => "You need a subscirption", "reason" => "subscription_required"} = + json_response(creator!, 402) + + assert [%{"is_public" => false}] = + json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) subscription = Subscription.new(%{ @@ -116,50 +127,38 @@ defmodule LenraWeb.EnvironmentControllerTest do Repo.insert(subscription) - [env] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) - - update_env_path = Routes.envs_path(creator!, :update, app["id"], env["id"]) - - creator! = - patch(creator!, update_env_path, %{ - "is_public" => true - }) - + creator! = patch(creator!, update_env_path, public_body) assert [%{"is_public" => true}] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) - patch(admin!, update_env_path, %{ - "is_public" => false - }) + patch(admin!, update_env_path, private_body) assert [%{"is_public" => false}] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) - user! = - patch(user!, update_env_path, %{ - "is_public" => true - }) + user! = patch(user!, update_env_path, public_body) + assert %{"message" => "Forbidden", "reason" => "forbidden"} = json_response(user!, 403) assert [%{"is_public" => false}] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) - other_dev! = - patch(other_dev!, update_env_path, %{ - "is_public" => true - }) + other_dev! = patch(other_dev!, update_env_path, public_body) + assert %{"message" => "Forbidden", "reason" => "forbidden"} = json_response(other_dev!, 403) assert [%{"is_public" => false}] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) - assert %{"message" => "Forbidden", "reason" => "forbidden"} = json_response(user!, 403) - assert %{"message" => "Forbidden", "reason" => "forbidden"} = json_response(other_dev!, 403) + assert %{"message" => "Environment not found", "reason" => "no_env_found"} = + json_response(patch(creator!, update_other_app_env_path, private_body), 404) + + assert %{"message" => "Environment not found", "reason" => "no_env_found"} = + json_response(patch(other_dev!, update_other_app_env_path, private_body), 404) end end describe "create" do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "environment controller authenticated", %{users: [creator!, user!, other_dev!, admin!]} do - creator! = create_app(creator!) - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) create_env_path = Routes.envs_path(creator!, :create, app["id"]) @@ -195,9 +194,7 @@ defmodule LenraWeb.EnvironmentControllerTest do @tag auth_user_with_cgs: :dev test "environment controller authenticated but invalid params", %{conn: conn!} do - conn! = create_app(conn!) - - assert app = json_response(conn!, 200) + %{conn: conn!, app: app} = create_app(conn!) conn! = post(conn!, Routes.envs_path(conn!, :create, app["id"]), %{ diff --git a/apps/lenra_web/test/controllers/logo_controller_test.exs b/apps/lenra_web/test/controllers/logo_controller_test.exs index d68ab9c4..abd535ec 100644 --- a/apps/lenra_web/test/controllers/logo_controller_test.exs +++ b/apps/lenra_web/test/controllers/logo_controller_test.exs @@ -1,9 +1,5 @@ defmodule LenraWeb.LogoControllerTest do use LenraWeb.ConnCase, async: false - alias Lenra.Apps - alias Lenra.Apps.Image - alias Lenra.Apps.Logo - alias Lenra.Repo setup %{conn: conn} do {:ok, @@ -18,24 +14,10 @@ defmodule LenraWeb.LogoControllerTest do }} end - defp create_app(conn) do - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - end - - defp clean_repo do - Repo.delete_all(Logo) - Repo.delete_all(Image) - end - @tag auth_user_with_cgs: :dev describe "put" do test "app not existing logo", %{conn: conn!, png_image: png_image} do - conn! = create_app(conn!) - assert app = json_response(conn!, 200) + %{conn: conn!, app: app} = create_app(conn!) encoded_data = Base.encode64(png_image.data) @@ -57,16 +39,13 @@ defmodule LenraWeb.LogoControllerTest do } = json_response(conn!, 200) assert image_app_id == app["id"] - clean_repo() end - @tag :skip @tag auth_user_with_cgs: :dev test "env not existing logo", %{conn: conn!, png_image: png_image} do - conn! = create_app(conn!) - assert app = json_response(conn!, 200) + %{conn: conn!, app: app} = create_app(conn!) - {:ok, env} = Apps.fetch_main_env_for_app(app["id"]) + [env] = json_response(get(conn!, Routes.envs_path(conn!, :index, app["id"])), 200) encoded_data = Base.encode64(png_image.data) @@ -77,7 +56,7 @@ defmodule LenraWeb.LogoControllerTest do conn!, :put_logo, app["id"], - env.id + env["id"] ), %{"data" => encoded_data, "type" => png_image.type} ) @@ -89,8 +68,46 @@ defmodule LenraWeb.LogoControllerTest do } = json_response(conn!, 200) assert image_app_id == app["id"] - assert image_env_id == env.id - clean_repo() + assert image_env_id == env["id"] + end + + @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] + test "logo controller authenticated", %{users: [creator!, user!, other_dev!, admin!], png_image: png_image} do + %{conn: creator!, app: app} = create_app(creator!) + %{conn: other_dev!, app: other_app} = create_app(other_dev!, "test2") + + [env] = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) + + update_app_logo_path = Routes.logos_path(creator!, :put_logo, app["id"]) + update_env_logo_path = Routes.logos_path(creator!, :put_logo, app["id"], env["id"]) + update_other_env_logo_path = Routes.logos_path(creator!, :put_logo, other_app["id"], env["id"]) + + encoded_data = Base.encode64(png_image.data) + + body = %{"data" => encoded_data, "type" => png_image.type} + + assert %{"image_id" => _id} = json_response(put(creator!, update_app_logo_path, body), 200) + assert %{"image_id" => _id} = json_response(put(creator!, update_env_logo_path, body), 200) + assert %{"image_id" => _id} = json_response(put(admin!, update_app_logo_path, body), 200) + assert %{"image_id" => _id} = json_response(put(admin!, update_env_logo_path, body), 200) + + assert %{"message" => "Forbidden", "reason" => "forbidden"} = + json_response(put(user!, update_app_logo_path, body), 403) + + assert %{"message" => "Forbidden", "reason" => "forbidden"} = + json_response(put(user!, update_env_logo_path, body), 403) + + assert %{"message" => "Forbidden", "reason" => "forbidden"} = + json_response(put(other_dev!, update_app_logo_path, body), 403) + + assert %{"message" => "Forbidden", "reason" => "forbidden"} = + json_response(put(other_dev!, update_env_logo_path, body), 403) + + assert %{"message" => "Environment not found", "reason" => "no_env_found"} = + json_response(put(creator!, update_other_env_logo_path, body), 404) + + assert %{"message" => "Environment not found", "reason" => "no_env_found"} = + json_response(put(other_dev!, update_other_env_logo_path, body), 404) end end end diff --git a/apps/lenra_web/test/controllers/user_environment_access_controller_test.exs b/apps/lenra_web/test/controllers/user_environment_access_controller_test.exs index 4a0f9e90..1e6416c7 100644 --- a/apps/lenra_web/test/controllers/user_environment_access_controller_test.exs +++ b/apps/lenra_web/test/controllers/user_environment_access_controller_test.exs @@ -5,14 +5,6 @@ defmodule LenraWeb.UserEnvironmentAccessControllerTest do {:ok, conn: conn} end - defp create_app(conn) do - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - end - describe "index" do test "user environment access controller not authenticated", %{conn: conn} do conn = get(conn, Routes.user_environment_access_path(conn, :index, 0, 0)) @@ -26,9 +18,7 @@ defmodule LenraWeb.UserEnvironmentAccessControllerTest do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "get user environment access check authorizations", %{users: [creator!, user, other_dev, admin]} do - creator! = create_app(creator!) - - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) assert envs = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) @@ -66,8 +56,7 @@ defmodule LenraWeb.UserEnvironmentAccessControllerTest do describe "create" do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "user environment access controller authenticated", %{users: [creator!, user!, other_dev!, admin!]} do - creator! = create_app(creator!) - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) assert envs = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) @@ -111,8 +100,7 @@ defmodule LenraWeb.UserEnvironmentAccessControllerTest do describe "add_user_env_access_from_email" do @tag auth_users_with_cgs: [:dev, :user, :dev, :admin] test "successfull authenticated", %{users: [creator!, user!, other_dev!, admin!]} do - creator! = create_app(creator!) - assert app = json_response(creator!, 200) + %{conn: creator!, app: app} = create_app(creator!) assert envs = json_response(get(creator!, Routes.envs_path(creator!, :index, app["id"])), 200) diff --git a/apps/lenra_web/test/controllers/webhooks_controller_test.exs b/apps/lenra_web/test/controllers/webhooks_controller_test.exs index 86ced035..c7e167d9 100644 --- a/apps/lenra_web/test/controllers/webhooks_controller_test.exs +++ b/apps/lenra_web/test/controllers/webhooks_controller_test.exs @@ -4,11 +4,9 @@ defmodule LenraWeb.WebhooksControllerTest do alias ApplicationRunner.Webhooks.WebhookServices setup %{conn: conn} do - conn = create_app(conn) + %{conn: conn, app: app} = create_app(conn) user = LenraWeb.Auth.current_resource(conn) - assert app = json_response(conn, 200) - {:ok, %{inserted_env: env}} = Lenra.Apps.create_env(app["id"], user.id, %{ "name" => "test", @@ -19,14 +17,6 @@ defmodule LenraWeb.WebhooksControllerTest do {:ok, %{conn: conn, user: user, env: env}} end - defp create_app(conn) do - post(conn, Routes.apps_path(conn, :create), %{ - "name" => "test", - "color" => "ffffff", - "icon" => 12 - }) - end - @tag auth_user_with_cgs: :dev test "Get env webhooks should work properly", %{conn: conn, env: env} do WebhookServices.create(env.id, %{"listener" => "test"}) diff --git a/apps/lenra_web/test/support/conn_case.ex b/apps/lenra_web/test/support/conn_case.ex index b2578ada..777b822b 100644 --- a/apps/lenra_web/test/support/conn_case.ex +++ b/apps/lenra_web/test/support/conn_case.ex @@ -35,6 +35,32 @@ defmodule LenraWeb.ConnCase do # The default endpoint for testing @endpoint LenraWeb.Endpoint + + def create_app(conn) do + create_app(conn, "test") + end + + def create_app(conn, name) when is_binary(name) do + create_app(conn, %{"name" => name}) + end + + def create_app(conn, params) when is_map(params) do + params = + Map.merge( + %{ + "name" => "test", + "color" => "ffffff", + "icon" => 12 + }, + params + ) + + conn = post(conn, Routes.apps_path(conn, :create), params) + + assert app = json_response(conn, 200) + + %{conn: conn, app: app} + end end end @@ -71,7 +97,7 @@ defmodule LenraWeb.ConnCase do def hydra_introspect_response(conn) do conn = parse_body_params(conn) - %{"scope" => scope, "token" => token} = conn.body_params + %{"scope" => _scope, "token" => token} = conn.body_params resp = decode_fake_token(token) Plug.Conn.resp(conn, 200, Jason.encode!(resp)) diff --git a/config/config.exs b/config/config.exs index 39394524..55e4ff69 100644 --- a/config/config.exs +++ b/config/config.exs @@ -134,8 +134,7 @@ config :argon2_elixir, # The source file are linked to sentry. config :sentry, enable_source_code_context: true, - root_source_code_path: File.cwd!(), - included_environments: ~w(production staging) + root_source_code_path: File.cwd!() # Add sentry as logger backend (as well as console logging) config :logger, backends: [:console, Sentry.LoggerBackend] diff --git a/mix.lock b/mix.lock index 49d6ea85..9cde3cd3 100644 --- a/mix.lock +++ b/mix.lock @@ -17,7 +17,7 @@ "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, "credo": {:hex, :credo, "1.6.7", "323f5734350fd23a456f2688b9430e7d517afb313fbd38671b8a4449798a7854", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "41e110bfb007f7eda7f897c10bf019ceab9a0b269ce79f015d54b0dcf4fc7dd3"}, "crontab": {:hex, :crontab, "1.1.13", "3bad04f050b9f7f1c237809e42223999c150656a6b2afbbfef597d56df2144c5", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "d67441bec989640e3afb94e123f45a2bc42d76e02988c9613885dc3d01cf7085"}, - "db_connection": {:hex, :db_connection, "2.4.3", "3b9aac9f27347ec65b271847e6baeb4443d8474289bd18c1d6f4de655b70c94d", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c127c15b0fa6cfb32eed07465e05da6c815b032508d4ed7c116122871df73c12"}, + "db_connection": {:hex, :db_connection, "2.6.0", "77d835c472b5b67fc4f29556dee74bf511bbafecdcaf98c27d27fa5918152086", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c2f992d15725e721ec7fbc1189d4ecdb8afef76648c746a8e1cad35e3b8a35f3"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dialyxir": {:hex, :dialyxir, "1.4.1", "a22ed1e7bd3a3e3f197b68d806ef66acb61ee8f57b3ac85fc5d57354c5482a93", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "84b795d6d7796297cca5a3118444b80c7d94f7ce247d49886e7c291e1ae49801"}, @@ -59,7 +59,7 @@ "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mint": {:hex, :mint, "1.5.1", "8db5239e56738552d85af398798c80648db0e90f343c8469f6c6d8898944fb6f", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "4a63e1e76a7c3956abd2c72f370a0d0aecddc3976dea5c27eccbecfa5e7d5b1e"}, - "mongodb_driver": {:hex, :mongodb_driver, "1.0.3", "f8b6eed227c6577f5f6c72726ea5baad591feec61687d4a271c72f93b9c3492c", [:mix], [{:db_connection, "~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "115d14460a32ea5d4d7a6472bfb914ec63f8bf3825814ffa4e1984063175e306"}, + "mongodb_driver": {:hex, :mongodb_driver, "1.2.1", "f626705cbf4fc64048d66814da8c09bc4c432fa267f8cff1b079b21aa280373f", [:mix], [{:db_connection, "~> 2.6", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 2.1.1", [hex: :decimal, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "35a51a1d1531a1a842af98634ad7bbeec87f46b1b8b55c776d3169cfd5b51baf"}, "neotomex": {:hex, :neotomex, "0.1.7", "64f76513653aa87ea7abdde0fd600e56955d838020a13d88f2bf334c88ac3e7a", [:mix], [], "hexpm", "4b87b8f614d1cd89dc8ba80ba0e559bedb3ebf6f6d74cd774fcfdd215e861445"}, "nimble_options": {:hex, :nimble_options, "1.0.2", "92098a74df0072ff37d0c12ace58574d26880e522c22801437151a159392270e", [:mix], [], "hexpm", "fd12a8db2021036ce12a309f26f564ec367373265b53e25403f0ee697380f1b8"}, "nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},