From 6e3fc6db4f250f029b83721044e956aa72c51e74 Mon Sep 17 00:00:00 2001 From: Nelson Vides Date: Mon, 17 Oct 2022 13:11:32 +0200 Subject: [PATCH] Implement an async GraphQL endpoint for deletion --- big_tests/tests/graphql_domain_SUITE.erl | 20 +++++++++++++++++++ priv/graphql/schemas/admin/domain.gql | 3 +++ ...mongoose_graphql_domain_admin_mutation.erl | 8 ++++++++ 3 files changed, 31 insertions(+) diff --git a/big_tests/tests/graphql_domain_SUITE.erl b/big_tests/tests/graphql_domain_SUITE.erl index 8fa4a3fd0b2..ea26960aa9c 100644 --- a/big_tests/tests/graphql_domain_SUITE.erl +++ b/big_tests/tests/graphql_domain_SUITE.erl @@ -41,6 +41,7 @@ domain_tests() -> get_domains_by_host_type, get_domain_details, delete_domain, + request_delete_domain, get_domains_after_deletion, set_domain_password, set_nonexistent_domain_password, @@ -177,6 +178,21 @@ delete_domain(Config) -> <<"domain">> := #{<<"domain">> := ?SECOND_EXAMPLE_DOMAIN}}, ParsedResult2). +request_delete_domain(Config) -> + Domain = <<"exampleDomain">>, + Result1 = request_remove_domain(Domain, ?HOST_TYPE, Config), + ParsedResult1 = get_ok_value([data, domain, requestRemoveDomain], Result1), + ct:pal("Value ~p~n", [ParsedResult1]), + ?assertMatch(#{<<"msg">> := <<"Domain disabled and enqueued for deletion">>, + <<"domain">> := #{<<"domain">> := Domain, + <<"status">> := <<"DELETING">>}}, + ParsedResult1), + F = fun() -> + Result = get_domain_details(Domain, Config), + domain_not_found_error_formatting(Result) + end, + mongoose_helper:wait_until(F, ok, #{time_left => timer:seconds(5)}). + get_domains_after_deletion(Config) -> Result = get_domains_by_host_type(?HOST_TYPE, Config), ParsedResult = get_ok_value([data, domain, domainsByHostType], Result), @@ -263,6 +279,10 @@ remove_domain(Domain, HostType, Config) -> Vars = #{domain => Domain, hostType => HostType}, execute_command(<<"domain">>, <<"removeDomain">>, Vars, Config). +request_remove_domain(Domain, HostType, Config) -> + Vars = #{domain => Domain, hostType => HostType}, + execute_command(<<"domain">>, <<"requestRemoveDomain">>, Vars, Config). + get_domains_by_host_type(HostType, Config) -> Vars = #{hostType => HostType}, execute_command(<<"domain">>, <<"domainsByHostType">>, Vars, Config). diff --git a/priv/graphql/schemas/admin/domain.gql b/priv/graphql/schemas/admin/domain.gql index 64cf83ebb9f..5816c76243d 100644 --- a/priv/graphql/schemas/admin/domain.gql +++ b/priv/graphql/schemas/admin/domain.gql @@ -14,6 +14,9 @@ type DomainAdminMutation @protected{ "Remove domain. Only for global admin" removeDomain(domain: String!, hostType: String!): RemoveDomainPayload @protected(type: GLOBAL) + "Remove domain. Only for global admin" + requestRemoveDomain(domain: String!, hostType: String!): RemoveDomainPayload + @protected(type: GLOBAL) "Enable domain. Only for global admin" enableDomain(domain: String!): Domain @protected(type: GLOBAL) diff --git a/src/graphql/admin/mongoose_graphql_domain_admin_mutation.erl b/src/graphql/admin/mongoose_graphql_domain_admin_mutation.erl index 1512503ce92..6e44de5f729 100644 --- a/src/graphql/admin/mongoose_graphql_domain_admin_mutation.erl +++ b/src/graphql/admin/mongoose_graphql_domain_admin_mutation.erl @@ -22,6 +22,14 @@ execute(_Ctx, admin, <<"removeDomain">>, #{<<"domain">> := Domain, <<"hostType"> {error, Error} -> error_handler(Error, Domain, HostType) end; +execute(_Ctx, admin, <<"requestRemoveDomain">>, #{<<"domain">> := Domain, <<"hostType">> := HostType}) -> + case mongoose_domain_api:request_delete_domain(Domain, HostType) of + ok -> + DomainObj = #domain{domain = Domain, host_type = HostType, status = deleting}, + {ok, #{<<"domain">> => DomainObj, <<"msg">> => <<"Domain disabled and enqueued for deletion">>}}; + {error, Error} -> + error_handler(Error, Domain, HostType) + end; execute(_Ctx, admin, <<"enableDomain">>, #{<<"domain">> := Domain}) -> case mongoose_domain_api:enable_domain(Domain) of ok ->