public async Task Handle_Will_CreateChannel_AND_EnsureUserGroupExists_AND_SendNotificationToChannel()
        {
            // Arrange
            var slackFacadeSpy           = new SlackFacadeSpy();
            var stubCapabilityRepository = new StubCapabilityRepository();

            var slackService    = new SlackService(slackFacadeSpy, null);
            var slackServiceSpy = new SlackServiceSpy(slackService);
            var nullLogger      = new  Microsoft.Extensions.Logging.Abstractions.NullLogger <SlackCapabilityCreatedDomainEventHandler>();

            var handler = new SlackCapabilityCreatedDomainEventHandler(
                logger: nullLogger,
                slackFacadeSpy,
                stubCapabilityRepository,
                slackServiceSpy
                );


            var capabilityCreatedDomainEvent = CapabilityCreatedDomainEvent.Create(
                Guid.NewGuid(),
                "aFineCapability"
                );


            // Act
            await handler.HandleAsync(capabilityCreatedDomainEvent);

            // Assert
            Assert.NotNull(slackFacadeSpy.CreatedChannelName);
            Assert.True(slackServiceSpy.EnsureUserGroupExistsHasBeenCalled);
            Assert.NotEmpty(slackFacadeSpy.ChannelsMessages);
            Assert.NotEmpty(slackFacadeSpy.ChannelsPinnedMessageTimeStamps);
        }
        public async Task Handle_WILL_InviteToChannel_AND_AddUserGroupUser()
        {
            // Arrange
            var capability = Capability.Create(
                id: Guid.NewGuid(),
                name: "FooCapability",
                slackChannelId: "FooChannelId",
                slackUserGroupId: "FooUserGroupId"
                );
            var slackFacadeSpy           = new SlackFacadeSpy();
            var stubCapabilityRepository = new StubCapabilityRepository();
            await stubCapabilityRepository.Add(capability);

            var slackMemberJoinedCapabilityDomainEventHandler = new SlackMemberJoinedCapabilityDomainEventHandler(
                null,
                slackFacadeSpy,
                stubCapabilityRepository,
                new SlackService(slackFacadeSpy, null)
                );
            var memberEmail = "*****@*****.**";
            var memberJoinedCapabilityDomainEvent = MemberJoinedCapabilityDomainEvent.Create(capability.Id, memberEmail);


            // Act
            await slackMemberJoinedCapabilityDomainEventHandler.HandleAsync(memberJoinedCapabilityDomainEvent);


            // Assert
            Assert.Equal(memberEmail, slackFacadeSpy.InvitedToChannel[new SlackChannelIdentifier(capability.SlackChannelId)].Single());
            Assert.Equal(memberEmail, slackFacadeSpy.UserGroupsUsers[capability.SlackUserGroupId].Single());
        }
        public async Task add_existing_connection_returns_expected_status_code()
        {
            var slackFacadeSpy = new SlackFacadeSpy();
            var logger         = new LoggerFactory().CreateLogger <SlackService>();
            var clientId       = Guid.NewGuid();
            var connection     = new ConnectionDto()
            {
                ClientId    = Guid.NewGuid().ToString(),
                ClientName  = "MyClient",
                ClientType  = "capability",
                ChannelId   = Guid.NewGuid().ToString(),
                ChannelName = "MyChannel",
                ChannelType = "slack"
            };

            using (var builder = new HttpClientBuilder())
            {
                var client = builder
                             .WithService <ICapabilityRepository>(new StubCapabilityRepository(new List <Guid> {
                    clientId
                }))
                             .WithService <ISlackFacade>(new SlackFacadeStub(simulateFailOnSendMessage: false))
                             .WithService <ISlackService>(new SlackService(slackFacadeSpy, logger))
                             .Build();

                var payload  = new ObjectContent(connection.GetType(), connection, new JsonMediaTypeFormatter());
                var response = await client.PostAsync($"api/v1/connections", payload);

                var response2 = await client.PostAsync($"api/v1/connections", payload);

                Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
                Assert.Equal(HttpStatusCode.Accepted, response2.StatusCode);
            }
        }
        public async Task TestWeCallSlackFacadeAndCreateUserGroupOnlyIfNotExisting()
        {
            var slackFacadeSpy = new SlackFacadeSpy();
            var logger         = new LoggerFactory().CreateLogger <SlackService>();
            var sut            = new SlackService(slackFacadeSpy, logger);

            var capabilityName = "foo";

            await sut.EnsureUserGroupExists(capabilityName);

            Assert.True(slackFacadeSpy.CreateUserGroupWasCalled);
            Assert.Equal(capabilityName + "-members", slackFacadeSpy.CreateUserGroupHandle);
        }
        public async Task GIVEN_query_with_ClientId_set_EXPECT_only_capabilities_with_given_id()
        {
            // Arrange
            var idOfWantedSender     = Guid.NewGuid();
            var capabilityRepository = new StubCapabilityRepository();
            await capabilityRepository.Add(Capability.Create(
                                               idOfWantedSender,
                                               "foo",
                                               "slackChannelId",
                                               "slackUserGroupId"
                                               ));

            await capabilityRepository.Add(Capability.Create(
                                               idOfWantedSender,
                                               "bar",
                                               "slackChannelId",
                                               "slackUserGroupId"
                                               ));

            await capabilityRepository.Add(Capability.Create(
                                               Guid.NewGuid(),
                                               "sheep",
                                               "slackChannelId",
                                               "slackUserGroupId"
                                               ));

            var slackFacadeSpy = new SlackFacadeSpy();

            var sut = new FindConnectionsByClientTypeClientIdChannelTypeChannelIdHandler(capabilityRepository, slackFacadeSpy);

            var clientIdOfWantedSender = new ClientId(idOfWantedSender.ToString());
            var query = new FindConnectionsByClientTypeClientIdChannelTypeChannelId(
                new ClientTypeCapability(),
                clientIdOfWantedSender,
                new ChannelTypeSlack(),
                null
                );


            // Act
            var results = await sut.HandleAsync(query);

            // Assert
            Assert.All(
                results,
                connection =>
                Assert.Equal(clientIdOfWantedSender, connection.ClientId)
                );
        }
Esempio n. 6
0
        private void Given_a_service_collection_with_a_imMemoryDb_and_SlackFacadeSpy()
        {
            var serviceProviderBuilder = new ServiceProviderBuilder();

            serviceProviderBuilder = serviceProviderBuilder
                                     .WithServicesFromStartup()
                                     .WithInMemoryDb()
                                     .RemoveType(typeof(ISlackFacade));

            var slackFacadeSpy = new SlackFacadeSpy();

            serviceProviderBuilder.Services.AddSingleton <ISlackFacade>(slackFacadeSpy);


            _serviceProvider = serviceProviderBuilder.Build();
        }
        public async Task GIVEN_empty_query_EXPECT_connections_for_all_capabilities()
        {
            // Arrange
            var capabilityRepository = new StubCapabilityRepository();
            await capabilityRepository.Add(Capability.Create(
                                               Guid.NewGuid(),
                                               "foo",
                                               "slackChannelId",
                                               "slackUserGroupId"
                                               ));

            await capabilityRepository.Add(Capability.Create(
                                               Guid.NewGuid(),
                                               "bar",
                                               "slackChannelId",
                                               "slackUserGroupId"
                                               ));

            var slackFacadeSpy = new SlackFacadeSpy();

            slackFacadeSpy.Conversations.AddRange(new [] { new ChannelDto {
                                                               Id = "slackChannelId", Name = "slackChannelName"
                                                           } });
            var sut = new FindConnectionsByClientTypeClientIdChannelTypeChannelIdHandler(capabilityRepository, slackFacadeSpy);

            var query = new FindConnectionsByClientTypeClientIdChannelTypeChannelId(
                null,
                null,
                null,
                null
                );

            // Act
            var results = await sut.HandleAsync(query);

            Assert.All(
                capabilityRepository.GetAll().Result,
                capability =>
                results.Single(r =>
                               r.ClientId.ToString() == capability.Id.ToString()
                               )
                );
        }
        public async Task TestWeCallSlackFacadeAndNotCreateUserGroup()
        {
            var slackFacadeSpy = new SlackFacadeSpy();
            var logger         = new LoggerFactory().CreateLogger <SlackService>();
            var sut            = new SlackService(slackFacadeSpy, logger);

            slackFacadeSpy.UserGroups.Add(new UserGroupDto
            {
                Handle = "foocapability-members",
                Id     = "bar",
                Name   = "foo"
            });

            var capabilityName = "foocapability";

            await sut.EnsureUserGroupExists(capabilityName);

            Assert.False(slackFacadeSpy.CreateUserGroupWasCalled);
        }
        public async Task Handle_will_SendNotificationToChannel_Ded_AND_SendNotificationToChannel_CapabilityId()
        {
            // Arrange
            var capability = Capability.Create(
                Guid.NewGuid(),
                "",
                "slackChannelId",
                ""
                );
            var slackFacadeSpy           = new SlackFacadeSpy();
            var stubCapabilityRepository = new StubCapabilityRepository();
            await stubCapabilityRepository.Add(capability);

            var slackContextAddedToCapabilityDomainEventHandler = new SlackContextAddedToCapabilityDomainEventHandler(
                stubCapabilityRepository,
                slackFacadeSpy,
                new ExternalEventMetaDataStore()
                );

            var contextAddedToCapabilityDomainEvent = ContextAddedToCapabilityDomainEvent.Create(
                capability.Id,
                "",
                "",
                Guid.NewGuid(),
                ""
                );


            // Act
            await slackContextAddedToCapabilityDomainEventHandler
            .HandleAsync(contextAddedToCapabilityDomainEvent);

            // Assert
            var hardCodedDedChannelId = new SlackChannelIdentifier("GFYE9B99Q");

            Assert.NotEmpty(slackFacadeSpy.ChannelsMessages[hardCodedDedChannelId]);
            Assert.NotEmpty(slackFacadeSpy.ChannelsMessages[capability.SlackChannelId.ToString()]);
        }
Esempio n. 10
0
        public async Task Handle_WILL_remove_user_from_channel_AND_user_group_AND_notify_user()
        {
            // Arrange
            var capability = Capability.Create(
                Guid.NewGuid(),
                "",
                "slackChannelId",
                "theUserGroup"
                );
            var userEmail = "*****@*****.**";
            await capability.AddMember(userEmail);

            var nullLogger               = new NullLogger <SlackMemberLeftCapabilityDomainEventHandler>();
            var slackFacadeSpy           = new SlackFacadeSpy();
            var stubCapabilityRepository = new StubCapabilityRepository();
            await stubCapabilityRepository.Add(capability);

            var slackMemberLeftCapabilityDomainEventHandler = new SlackMemberLeftCapabilityDomainEventHandler(
                nullLogger,
                slackFacadeSpy,
                stubCapabilityRepository
                );


            var memberLeftCapabilityDomainEvent = MemberLeftCapabilityDomainEvent.Create(capability.Id, userEmail);


            // Act

            await slackMemberLeftCapabilityDomainEventHandler.HandleAsync(memberLeftCapabilityDomainEvent);

            // Assert
            Assert.Equal(userEmail, slackFacadeSpy.RemovedFromChannel[capability.SlackChannelId.ToString()].First());
            Assert.Equal(userEmail, slackFacadeSpy.RemovedFromUsergroup[capability.SlackUserGroupId.ToString()].First());
            Assert.NotEmpty(slackFacadeSpy.UsersToNotifications[userEmail]);
        }