public void expected_domain_event_is_raised_when_Context_is_added()
        {
            // Arrange
            var contextName = "foo";

            var sut = new CapabilityBuilder().Build();


            // Act
            sut.AddContext(contextName);


            // Assert
            var @event =
                sut.DomainEvents.Single(c => c.GetType() == typeof(ContextAddedToCapability)) as
                ContextAddedToCapability;

            Assert.Equal(
                sut.Id,
                @event.CapabilityId
                );

            Assert.Equal(
                contextName,
                @event.ContextName
                );
        }
        public async Task put_returns_badrequest_when_updating_capability_with_invalid_name()
        {
            using (var builder = new HttpClientBuilder())
            {
                var stubCapability = new CapabilityBuilder().Build();

                var errorBody = "message regarding bad name";
                var client    = builder
                                .WithService <ICapabilityApplicationService>(new ErroneousCapabilityApplicationService(new CapabilityValidationException(errorBody)))
                                .Build();

                var dummyCapabilityId = "foo";
                var stubInput         = $"{{\"name\":\"{stubCapability.Name}\", \"description\":\"{stubCapability.Description}\"}}";

                var response = await client.PutAsync($"api/v1/capabilities/{dummyCapabilityId}", new JsonContent(stubInput));

                var erroredMessageJSON = $"{{\"message\":\"{errorBody}\"}}";

                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                Assert.Equal(
                    expected: erroredMessageJSON,
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }
Exemple #3
0
        public async Task get_all_capabilities_return_expected_list_with_only_v2()
        {
            using (var builder = new HttpClientBuilder())
            {
                var capNewWithoutContext = new CapabilityBuilder().Build();
                var ctx = new ContextBuilder().WithAccountId(null).WithRoleArn(null).WithRoleEmail(null).Build();
                var capNewWithContext          = new CapabilityBuilder().WithContexts(ctx).Build();
                var populatedContext           = new ContextBuilder().Build();
                var capNewWithPopulatedContext = new CapabilityBuilder().WithContexts(populatedContext).Build();

                Capability[] stubCapabilities = new[] { capNewWithContext, capNewWithoutContext, capNewWithPopulatedContext };
                var          client           = builder
                                                .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: stubCapabilities))
                                                .Build();

                var request = new HttpRequestMessage(HttpMethod.Get, "api/v1/adsync");
                request.Headers.Authorization = BasicAuthCredentials.BASIC_AUTHENTICATION_HEADER_VALUE;
                var response = await client.SendAsync(request);

                var content = await response.Content.ReadAsStringAsync();

                Assert.Equal(
                    expected: $"{{\"items\":[{{\"identifier\":\"foo-582a4\",\"members\":[],\"isV1\":false,\"awsAccountId\":\"222222222222\",\"awsRoleArn\":\"arn:aws:iam::528563840976:role/aws-elasticbeanstalk-ec2-role\"}}]}}",
                    actual: content);
            }
        }
Exemple #4
0
        public void domain_event_is_not_raised_when_Context_with_same_name_is_added_multiple_times()
        {
            // Arrange
            var contextName = "foo";

            var sut = new CapabilityBuilder().Build();


            // Act
            sut.AddContext(contextName);
            sut.AddContext(contextName);
            sut.AddContext(contextName);


            // Assert
            var @event = sut.DomainEvents.Single() as ContextAddedToCapability;

            Assert.Equal(
                sut.Id,
                @event.CapabilityId
                );

            Assert.Equal(
                contextName,
                @event.ContextName
                );

            Assert.NotNull(@event.ContextId);
        }
        public async Task get_single_capability_with_a_single_context_returns_expected_body()
        {
            using (var builder = new HttpClientBuilder())
            {
                var contextName    = "*****@*****.**";
                var contextGuid    = Guid.NewGuid();
                var awsAccountId   = "222222222222";
                var awsRoleArn     = "arne:oharne:dugaariskolepaadenjyskehaandvaerkerskole:Role/ADFS-Developer";
                var awsRoleEmail   = "*****@*****.**";
                var context        = new Context(contextGuid, contextName, awsAccountId, awsRoleArn, awsRoleEmail);
                var stubCapability = new CapabilityBuilder()
                                     .WithContexts(context)
                                     .Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { stubCapability }))
                             .Build();

                var response = await client.GetAsync($"api/v1/capabilities/{stubCapability.Id}");

                Assert.Equal(
                    expected: $"{{\"id\":\"{stubCapability.Id}\",\"name\":\"{stubCapability.Name}\",\"rootId\":\"foo-582a4\",\"description\":\"{stubCapability.Description}\",\"members\":[],\"contexts\":[{{\"id\":\"{contextGuid}\",\"name\":\"{contextName}\",\"awsAccountId\":\"{awsAccountId}\",\"awsRoleArn\":\"{awsRoleArn}\",\"awsRoleEmail\":\"{awsRoleEmail}\"}}]}}",
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }
Exemple #6
0
        public async Task removing_non_existing_member_from_a_capability_throws_exception()
        {
            var capability = new CapabilityBuilder().Build();

            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            var nonExistingMemberEmail = "*****@*****.**";

            await Assert.ThrowsAsync <NotMemberOfCapabilityException>(() => sut.LeaveCapability(capability.Id, nonExistingMemberEmail));
        }
Exemple #7
0
        public async Task expected_member_is_added_to_capability()
        {
            var capability = new CapabilityBuilder().Build();

            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            var stubMemberEmail = "*****@*****.**";

            await sut.JoinCapability(capability.Id, stubMemberEmail);

            Assert.Equal(new[] { stubMemberEmail }, capability.Members.Select(x => x.Email));
        }
        public void expected_domain_event_is_raised_when_membership_is_started_for_a_member()
        {
            var sut = new CapabilityBuilder().Build();

            var stubMemberEmail = "foo";

            sut.StartMembershipFor(stubMemberEmail);

            Assert.Equal(
                expected: new MemberJoinedCapability(sut.Id, stubMemberEmail),
                actual: sut.DomainEvents.Last(),
                comparer: new PropertiesComparer <IDomainEvent>()
                );
        }
Exemple #9
0
        public void expected_context_is_added_to_contexts()
        {
            // Arrange
            var contextName = "foo";

            var sut = new CapabilityBuilder().Build();


            // Act
            sut.AddContext(contextName);


            // Assert
            Assert.Contains(sut.Contexts, context => context.Name == contextName);
        }
        public async Task get_single_capability_returns_expected_status_code()
        {
            using (var builder = new HttpClientBuilder())
            {
                var subCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { subCapability }))
                             .Build();

                var response = await client.GetAsync($"api/v1/capabilities/{subCapability.Id}");

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public async Task post_returns_expected_status_code_when_creating_a_new_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var dummyCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(dummyCapability))
                             .Build();

                var stubInput = "{\"name\":\"foo\"}";
                var response  = await client.PostAsync("api/v1/capabilities", new JsonContent(stubInput));

                Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            }
        }
Exemple #12
0
        public async Task expected_member_is_removed_from_capability()
        {
            var stubMemberEmail = "*****@*****.**";

            var capability = new CapabilityBuilder()
                             .WithMembers(stubMemberEmail)
                             .Build();

            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            await sut.LeaveCapability(capability.Id, stubMemberEmail);

            Assert.Empty(capability.Members);
        }
Exemple #13
0
        public async Task adding_the_same_member_to_a_capability_multiple_times_yields_single_membership()
        {
            var capability = new CapabilityBuilder().Build();

            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            var stubMemberEmail = "*****@*****.**";

            await sut.JoinCapability(capability.Id, stubMemberEmail);

            await sut.JoinCapability(capability.Id, stubMemberEmail);

            Assert.Equal(new[] { stubMemberEmail }, capability.Members.Select(x => x.Email));
        }
        public async Task post_returns_expected_status_code_when_adding_a_member_to_an_existing_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var subCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { subCapability }))
                             .Build();

                var stubInput = "{\"email\":\"foo\"}";
                var response  = await client.PostAsync($"api/v1/capabilities/{subCapability.Id}/members", new JsonContent(stubInput));

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public async Task put_returns_expected_status_code_when_updating_existing_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var dummyCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { dummyCapability }))
                             .Build();

                var dummyCapabilityId = "foo";
                var stubInput         = "{\"name\":\"foo\"}";
                var response          = await client.PutAsync($"api/v1/capabilities/{dummyCapabilityId}", new JsonContent(stubInput));

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
        public async Task delete_returns_expected_status_code_when_deleting_an_existing_member_on_a_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var subCapability = new CapabilityBuilder()
                                    .WithMembers("foo")
                                    .Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { subCapability }))
                             .Build();

                var response = await client.DeleteAsync($"api/v1/capabilities/{subCapability.Id}/members/foo");

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            }
        }
Exemple #17
0
        public async Task updating_a_non_existing_context_on_an_existing_capability_throws_exception()
        {
            var capability = new CapabilityBuilder()
                             .Build();
            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            var nonExistingContextId = Guid.Empty;
            var dummyAccountId       = "111111111111";
            var dummyEmail           = "*****@*****.**";
            var dummyArn             = "mynameisarne";


            await Assert.ThrowsAsync <ContextDoesNotExistException>(() =>
                                                                    sut.UpdateContext(capability.Id, nonExistingContextId, dummyAccountId, dummyArn, dummyEmail));
        }
        public async Task get_single_capability_without_any_members_returns_expected_body()
        {
            using (var builder = new HttpClientBuilder())
            {
                var stubCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { stubCapability }))
                             .Build();

                var response = await client.GetAsync($"api/v1/capabilities/{stubCapability.Id}");

                Assert.Equal(
                    expected: $"{{\"id\":\"{stubCapability.Id}\",\"name\":\"{stubCapability.Name}\",\"rootId\":\"{stubCapability.RootId}\",\"description\":\"{stubCapability.Description}\",\"members\":[],\"contexts\":[]}}",
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }
Exemple #19
0
        public void expected_nothing_happened_when_adding_a_existing_context()
        {
            // Arrange
            var contextName     = "foo";
            var existingContext = new Context(Guid.Empty, contextName);

            var sut = new CapabilityBuilder()
                      .WithContexts(existingContext)
                      .Build();


            // Act
            sut.AddContext(contextName);


            // Assert
            Assert.Empty(sut.DomainEvents);
            Assert.Equal(existingContext, sut.Contexts.Single());
        }
        public async Task post_returns_expected_location_header_when_creating_a_new_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var subCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { subCapability }))
                             .Build();

                var stubInput = "{\"name\":\"foo\"}";
                var response  = await client.PostAsync("api/v1/capabilities", new JsonContent(stubInput));

                Assert.EndsWith(
                    expectedEndString: $"/api/v1/capabilities/{subCapability.Id}",
                    actualString: response.Headers.Location.ToString()
                    );
            }
        }
        public async Task post_returns_expected_body_when_creating_a_new_capability()
        {
            using (var builder = new HttpClientBuilder())
            {
                var stubCapability = new CapabilityBuilder().Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: new[] { stubCapability }))
                             .Build();

                var stubInput = $"{{\"name\":\"{stubCapability.Name}\", \"description\":\"{stubCapability.Description}\"}}";
                var response  = await client.PostAsync("api/v1/capabilities", new JsonContent(stubInput));

                Assert.Equal(
                    expected: $"{{\"id\":\"{stubCapability.Id}\",\"name\":\"{stubCapability.Name}\",\"rootId\":\"{stubCapability.RootId}\",\"description\":\"{stubCapability.Description}\",\"members\":[],\"contexts\":[]}}",
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }
Exemple #22
0
        public async Task get_all_capabilities_returns_expected_list_with_only_v1()
        {
            using (var builder = new HttpClientBuilder())
            {
                var capOld = new CapabilityBuilder().WithRootId(null).Build();

                Capability[] stubCapabilities = new[] { capOld };
                var          client           = builder
                                                .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapabilities: stubCapabilities))
                                                .Build();

                var request = new HttpRequestMessage(HttpMethod.Get, "api/v1/adsync");
                request.Headers.Authorization = BasicAuthCredentials.BASIC_AUTHENTICATION_HEADER_VALUE;
                var response = await client.SendAsync(request);

                var content = await response.Content.ReadAsStringAsync();

                Assert.Equal(
                    expected: $"{{\"items\":[{{\"identifier\":\"Foo\",\"members\":[],\"isV1\":true,\"awsAccountId\":null,\"awsRoleArn\":null}}]}}",
                    actual: content);
            }
        }
        public async Task get_single_capability_with_a_single_member_returns_expected_body()
        {
            using (var builder = new HttpClientBuilder())
            {
                var memberEmail = "*****@*****.**";

                var stubCapability = new CapabilityBuilder()
                                     .WithMembers(memberEmail)
                                     .Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapability))
                             .Build();

                var response = await client.GetAsync($"api/v1/capabilities/{stubCapability.Id}");

                Assert.Equal(
                    expected: $"{{\"id\":\"{stubCapability.Id}\",\"name\":\"{stubCapability.Name}\",\"description\":\"{stubCapability.Description}\",\"members\":[{{\"email\":\"{memberEmail}\"}}],\"contexts\":[]}}",
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }
Exemple #24
0
        public async Task updating_a_existing_context_on_an_existing_capability()
        {
            var context    = new Context(Guid.NewGuid(), "default");
            var capability = new CapabilityBuilder()
                             .WithContexts(context)
                             .Build();

            var sut = new CapabilityApplicationServiceBuilder()
                      .WithCapabilityRepository(new StubCapabilityRepository(capability))
                      .Build();

            var newAccountId = "111111111111";
            var newEmail     = "*****@*****.**";
            var newRoleArn   = "mynameisarne";

            await sut.UpdateContext(capability.Id, context.Id, newAccountId, newRoleArn, newEmail);

            var contextFromCapability = capability.Contexts.Single();

            Assert.Equal(contextFromCapability.AWSAccountId, newAccountId);
            Assert.Equal(contextFromCapability.AWSRoleArn, newRoleArn);
            Assert.Equal(contextFromCapability.AWSRoleEmail, newEmail);
        }
        public async Task get_single_capability_with_a_single_context_returns_expected_body()
        {
            using (var builder = new HttpClientBuilder())
            {
                var contextName        = "*****@*****.**";
                var contextDescription = "wowsuchdescription";
                var contextGuid        = Guid.NewGuid();
                var context            = new Context(contextGuid, contextName);
                var stubCapability     = new CapabilityBuilder()
                                         .WithContexts(context)
                                         .Build();

                var client = builder
                             .WithService <ICapabilityApplicationService>(new StubCapabilityApplicationService(stubCapability))
                             .Build();

                var response = await client.GetAsync($"api/v1/capabilities/{stubCapability.Id}");

                Assert.Equal(
                    expected: $"{{\"id\":\"{stubCapability.Id}\",\"name\":\"{stubCapability.Name}\",\"description\":\"{stubCapability.Description}\",\"members\":[],\"contexts\":[{{\"id\":\"{contextGuid}\",\"name\":\"{contextName}\"}}]}}",
                    actual: await response.Content.ReadAsStringAsync()
                    );
            }
        }