Exemplo n.º 1
0
        public async Task Handle_RegisterApnsDeviceCommand_ReplacesIfRegisteredForDifferentUser()
        {
            IUser userTwo = Substitute.For <IUser>();

            userTwo.Id.Returns(Guid.NewGuid());
            var oldToken = new ApnsUserDeviceToken(Guid.NewGuid(), userTwo, DeviceToken1, "My.AppId");

            repository.Aggregates.Add(
                new FakeRepository.EntityEntry(
                    oldToken,
                    FakeRepository.EntityState.Unchanged));

            await sut.HandleAsync(new RegisterApnsDeviceCommand()
            {
                AppId       = "My.AppId",
                DeviceToken = oldToken.DeviceToken
            }, CancellationToken.None);

            await repository.SaveChangesAsync();

            Assert.Equal(1, repository.FindAll <ApnsUserDeviceToken>().Count());
            Assert.Contains(repository.FindAll <ApnsUserDeviceToken>(),
                            x => x.UserId == userContext.UserId &&
                            x.AppId == "My.AppId" &&
                            x.DeviceToken == oldToken.DeviceToken &&
                            x.IssuedDateTime == FakeClock.Now);
        }
        public async Task HandleAsync(RegisterApnsDeviceCommand message, CancellationToken cancellationToken)
        {
            if (!userContext.IsAuthenticated)
            {
                throw new InvalidOperationException("Cannot register APNS device token for an unauthenticated user");
            }

            string normalizedDeviceToken = message.DeviceToken.Replace(" ", "");
            ApnsUserDeviceToken token    = await repository.FirstOrDefaultAsync <ApnsUserDeviceToken>(
                x => x.DeviceToken == normalizedDeviceToken &&
                x.AppId == message.AppId);

            if (token != null)
            {
                if (token.UserId == userContext.UserId)
                {
                    return;
                }

                repository.Remove(token);
            }

            // TODO restrict AppIds (a configurable list?)

            token = new ApnsUserDeviceToken(Guid.NewGuid(), await userContext.GetUserAsync(),
                                            normalizedDeviceToken, message.AppId);
            repository.Add(token);

            Logger.Debug($"Added external APNS user device token for user ID {userContext.UserId}");
        }
        public async Task HandleAsync(DeregisterApnsDeviceCommand message, CancellationToken cancellationToken)
        {
            string normalizedDeviceToken = message.DeviceToken.Replace(" ", "");
            ApnsUserDeviceToken token    = await repository.FirstOrDefaultAsync <ApnsUserDeviceToken>(
                x => x.DeviceToken == normalizedDeviceToken &&
                x.AppId == message.AppId);

            if (token != null)
            {
                repository.Remove(token);
            }
        }
Exemplo n.º 4
0
        public async Task Handle_DeregisterApnsDeviceCommand_RemovesToken()
        {
            var oldToken = new ApnsUserDeviceToken(Guid.NewGuid(), userContext.FakeUser, DeviceToken1, "My.AppId");

            repository.Aggregates.Add(
                new FakeRepository.EntityEntry(
                    oldToken,
                    FakeRepository.EntityState.Unchanged));

            await sut.HandleAsync(new DeregisterApnsDeviceCommand()
            {
                AppId       = "My.AppId",
                DeviceToken = oldToken.DeviceToken
            }, CancellationToken.None);

            Assert.Empty(repository.FindAll <ApnsUserDeviceToken>());
        }
Exemplo n.º 5
0
        public async Task Handle_RegisterApnsDeviceCommand_DoesntInsertTwice()
        {
            var oldToken = new ApnsUserDeviceToken(Guid.NewGuid(), userContext.FakeUser, DeviceToken1, "My.AppId");

            repository.Aggregates.Add(
                new FakeRepository.EntityEntry(
                    oldToken,
                    FakeRepository.EntityState.Unchanged));

            await sut.HandleAsync(new RegisterApnsDeviceCommand()
            {
                AppId       = "My.AppId",
                DeviceToken = oldToken.DeviceToken
            }, CancellationToken.None);

            Assert.Equal(1, repository.FindAll <ApnsUserDeviceToken>().Count());
            Assert.Contains(repository.FindAll <ApnsUserDeviceToken>(),
                            x => x == oldToken &&
                            x.UserId == userContext.UserId &&
                            x.AppId == "My.AppId" &&
                            x.DeviceToken == oldToken.DeviceToken &&
                            x.IssuedDateTime == FakeClock.Now);
        }
Exemplo n.º 6
0
        public void Constructor_SavesToken()
        {
            var token = new ApnsUserDeviceToken(Guid.NewGuid(), user, "1cc31e97c96b274eb056a969eff7f6d783fcdf6985dc457734837bd45fb1a731", "appid");

            Assert.Equal("1cc31e97c96b274eb056a969eff7f6d783fcdf6985dc457734837bd45fb1a731", token.DeviceToken);
        }