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); } }
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>()); }
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); }
public void Constructor_SavesToken() { var token = new ApnsUserDeviceToken(Guid.NewGuid(), user, "1cc31e97c96b274eb056a969eff7f6d783fcdf6985dc457734837bd45fb1a731", "appid"); Assert.Equal("1cc31e97c96b274eb056a969eff7f6d783fcdf6985dc457734837bd45fb1a731", token.DeviceToken); }