Example #1
0
        public async Task CardWitPreviousVersions_NotToBeNotified()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user1  = await CreateUserAsync(testDB);

            var card = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 3));

            var user2 = await CreateUserAsync(testDB);

            var previousVersion1 = await CreateCardPreviousVersionAsync(testDB, user2.Id, card.Id, new DateTime(2020, 11, 2));

            await CreatePreviousVersionPreviousVersionAsync(testDB, user2.Id, previousVersion1, new DateTime(2020, 11, 1));

            var lastNotificationDate = new DateTime(2020, 11, 3);

            await CreateCardNotificationAsync(testDB, user1.Id, card.Id, lastNotificationDate);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext);
                var versions = notifier.Run(user1);
                Assert.AreEqual(0, versions.Length);
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user1.Id);
                Assert.AreEqual(lastNotificationDate, notif.LastNotificationUtcDate);
            }
        }
Example #2
0
        public async Task CardWitPreviousVersions_ToBeNotified_LastNotifBeforePreviousVersionCreation()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user1  = await CreateUserAsync(testDB);

            var card = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 5));

            var user2 = await CreateUserAsync(testDB);

            var previousVersion1 = await CreateCardPreviousVersionAsync(testDB, user2.Id, card.Id, new DateTime(2020, 11, 3));

            await CreatePreviousVersionPreviousVersionAsync(testDB, user2.Id, previousVersion1, new DateTime(2020, 11, 1));
            await CreateCardNotificationAsync(testDB, user1.Id, card.Id, new DateTime(2020, 11, 2));

            var now = new DateTime(2020, 11, 5);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext);
                var versions = notifier.Run(user1, now);
                Assert.AreEqual(1, versions.Length);
                Assert.AreEqual(card.Id, versions[0].CardId);
                Assert.IsTrue(versions[0].CardIsViewable);
                await dbContext.SaveChangesAsync();
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user1.Id);
                Assert.AreEqual(now, notif.LastNotificationUtcDate);
            }
        }
Example #3
0
        public async Task CardWithoutPreviousVersion_ToBeNotified()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user   = await CreateUserAsync(testDB);

            var card = await CreateCardAsync(testDB, user.Id, new DateTime(2020, 11, 2));

            await CreateCardNotificationAsync(testDB, user.Id, card.Id, new DateTime(2020, 11, 1));

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext);
                var versions = notifier.Run(user);
                Assert.AreEqual(1, versions.Length);
                Assert.AreEqual(card.Id, versions[0].CardId);
                Assert.IsTrue(versions[0].CardIsViewable);
                Assert.AreEqual(card.FrontSide, versions[0].FrontSide);
                Assert.AreEqual(card.VersionDescription, versions[0].VersionDescription);
                await dbContext.SaveChangesAsync();
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user.Id);
                Assert.IsTrue(notif.LastNotificationUtcDate > new DateTime(2020, 11, 1));
            }
        }
Example #4
0
        public async Task CardWithOnePreviousVersion_ToBeNotified_LastNotifBeforeInitialCreation()
        {
            var testDB = DbHelper.GetEmptyTestDB();
            var user1  = await UserHelper.CreateInDbAsync(testDB);

            var card = await CardHelper.CreateAsync(testDB, user1, new DateTime(2020, 11, 3));

            var user2 = await UserHelper.CreateInDbAsync(testDB);

            await CreateCardPreviousVersionAsync(testDB, user2, card.Id, new DateTime(2020, 11, 2));

            await CardSubscriptionHelper.CreateAsync(testDB, user1, card.Id, new DateTime(2020, 11, 1));

            var now = new DateTime(2020, 11, 4);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext.AsCallContext(), now);
                var versions = await notifier.RunAsync(user1);

                Assert.AreEqual(1, versions.Length);
                Assert.AreEqual(card.Id, versions[0].CardId);
                Assert.IsTrue(versions[0].CardIsViewable);
                Assert.IsNull(versions[0].VersionIdOnLastNotification);
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user1);
                Assert.AreEqual(now, notif.LastNotificationUtcDate);
            }
        }
Example #5
0
        public async Task EmptyDB()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user1  = await CreateUserAsync(testDB);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext);
                var versions = notifier.Run(user1);
                Assert.AreEqual(0, versions.Length);
            }
        }
Example #6
0
        public async Task CardWithOnePreviousVersion_ToBeNotifiedWithoutAccessibility()
        {
            var testDB = DbHelper.GetEmptyTestDB();
            var user1  = await UserHelper.CreateInDbAsync(testDB);

            var card = await CardHelper.CreateAsync(testDB, user1, new DateTime(2020, 11, 2), user1.AsArray());

            var previousVersion = await CreateCardPreviousVersionAsync(testDB, user1, card.Id, new DateTime(2020, 11, 1));

            var user2 = await UserHelper.CreateInDbAsync(testDB);

            await CardSubscriptionHelper.CreateAsync(testDB, user2, card.Id, new DateTime(2020, 11, 1));

            var now = new DateTime(2020, 11, 2);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext.AsCallContext(), now);

                var user1versions = await notifier.RunAsync(user1);

                Assert.AreEqual(0, user1versions.Length);

                var user2versions = await notifier.RunAsync(user2);

                Assert.AreEqual(1, user2versions.Length);
                Assert.AreEqual(card.Id, user2versions[0].CardId);
                Assert.IsFalse(user2versions[0].CardIsViewable);
                Assert.IsNull(user2versions[0].VersionDescription);
                Assert.IsNull(user2versions[0].FrontSide);
                Assert.AreEqual(previousVersion.Id, user2versions[0].VersionIdOnLastNotification);
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user2);
                Assert.AreEqual(now, notif.LastNotificationUtcDate);
            }
        }
Example #7
0
        public async Task CardWitOnePreviousVersion_ToBeNotifiedWithoutAccessibility()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user1  = await CreateUserAsync(testDB);

            var card = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 2), new[] { user1.Id });

            await CreateCardPreviousVersionAsync(testDB, user1.Id, card.Id, new DateTime(2020, 11, 1));

            var user2 = await CreateUserAsync(testDB);

            await CreateCardNotificationAsync(testDB, user2.Id, card.Id, new DateTime(2020, 11, 1));

            var now = new DateTime(2020, 11, 2);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier = new UserCardVersionsNotifier(dbContext);

                var user1versions = notifier.Run(user1, now);
                Assert.AreEqual(0, user1versions.Length);

                var user2versions = notifier.Run(user2, now);
                Assert.AreEqual(1, user2versions.Length);
                Assert.AreEqual(card.Id, user2versions[0].CardId);
                Assert.IsFalse(user2versions[0].CardIsViewable);
                Assert.IsNull(user2versions[0].VersionDescription);
                Assert.IsNull(user2versions[0].FrontSide);

                await dbContext.SaveChangesAsync();
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notif = dbContext.CardNotifications.Single(cn => cn.CardId == card.Id && cn.UserId == user2.Id);
                Assert.AreEqual(now, notif.LastNotificationUtcDate);
            }
        }
Example #8
0
        public async Task MultipleVersions()
        {
            var testDB = DbServices.GetEmptyTestDB(typeof(UserCardVersionsNotifierTests));
            var user1  = await CreateUserAsync(testDB);

            var user2 = await CreateUserAsync(testDB);

            var card1 = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 10));

            var card1PV1 = await CreateCardPreviousVersionAsync(testDB, user2.Id, card1.Id, new DateTime(2020, 11, 5));

            await CreatePreviousVersionPreviousVersionAsync(testDB, user2.Id, card1PV1, new DateTime(2020, 11, 1));
            await CreateCardNotificationAsync(testDB, user1.Id, card1.Id, new DateTime(2020, 11, 2));

            var card2 = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 10));

            var card2PV1 = await CreateCardPreviousVersionAsync(testDB, user2.Id, card2.Id, new DateTime(2020, 11, 5));

            await CreatePreviousVersionPreviousVersionAsync(testDB, user2.Id, card2PV1, new DateTime(2020, 11, 2));
            await CreateCardNotificationAsync(testDB, user1.Id, card2.Id, new DateTime(2020, 11, 1));

            var card3 = await CreateCardAsync(testDB, user1.Id, new DateTime(2020, 11, 10));

            var card3PV1 = await CreateCardPreviousVersionAsync(testDB, user2.Id, card3.Id, new DateTime(2020, 11, 5));

            await CreatePreviousVersionPreviousVersionAsync(testDB, user2.Id, card3PV1, new DateTime(2020, 11, 2));

            var card3LastNotifDate = new DateTime(2020, 11, 11);

            await CreateCardNotificationAsync(testDB, user1.Id, card3.Id, card3LastNotifDate);

            var card4 = await CreateCardAsync(testDB, user2.Id, new DateTime(2020, 11, 10), new Guid[] { user2.Id });  //Not to be notified because no access for user1

            await CreateCardPreviousVersionAsync(testDB, user2.Id, card4.Id, new DateTime(2020, 11, 5));
            await CreateCardNotificationAsync(testDB, user1.Id, card4.Id, new DateTime(2020, 11, 2));

            var card5 = await CreateCardAsync(testDB, user2.Id, new DateTime(2020, 11, 10), new Guid[] { user1.Id, user2.Id });

            await CreateCardPreviousVersionAsync(testDB, user2.Id, card5.Id, new DateTime(2020, 11, 5));
            await CreateCardNotificationAsync(testDB, user1.Id, card5.Id, new DateTime(2020, 11, 2));

            var now = new DateTime(2020, 11, 5);

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                var notifier      = new UserCardVersionsNotifier(dbContext);
                var user1Versions = notifier.Run(user1, now);
                Assert.AreEqual(4, user1Versions.Length);

                var notifForCard1 = user1Versions.Where(v => v.CardId == card1.Id).Single();
                Assert.IsTrue(notifForCard1.CardIsViewable);

                var notifForCard2 = user1Versions.Where(v => v.CardId == card2.Id).Single();
                Assert.IsTrue(notifForCard2.CardIsViewable);

                Assert.IsFalse(user1Versions.Any(v => v.CardId == card3.Id));

                var notifForCard4 = user1Versions.Where(v => v.CardId == card4.Id).Single();
                Assert.IsFalse(notifForCard4.CardIsViewable);

                var notifForCard5 = user1Versions.Where(v => v.CardId == card5.Id).Single();
                Assert.IsTrue(notifForCard5.CardIsViewable);

                await dbContext.SaveChangesAsync();
            }

            using (var dbContext = new MemCheckDbContext(testDB))
            {
                Assert.AreEqual(now, dbContext.CardNotifications.Single(cn => cn.CardId == card1.Id && cn.UserId == user1.Id).LastNotificationUtcDate);
                Assert.AreEqual(now, dbContext.CardNotifications.Single(cn => cn.CardId == card2.Id && cn.UserId == user1.Id).LastNotificationUtcDate);
                Assert.AreEqual(card3LastNotifDate, dbContext.CardNotifications.Single(cn => cn.CardId == card3.Id && cn.UserId == user1.Id).LastNotificationUtcDate);
                Assert.AreEqual(now, dbContext.CardNotifications.Single(cn => cn.CardId == card4.Id && cn.UserId == user1.Id).LastNotificationUtcDate);
                Assert.AreEqual(now, dbContext.CardNotifications.Single(cn => cn.CardId == card5.Id && cn.UserId == user1.Id).LastNotificationUtcDate);
            }
        }