예제 #1
0
        public void SuccessfulFlowEndsInNextStep()
        {
            const string transferCode  = "abcdefgh";
            var          settingsModel = CreateSettingsModel(transferCode);

            byte[] encryptedRepository = CreateEncryptedRepository(transferCode);

            Mock <IStoryBoard> storyBoard = new Mock <IStoryBoard>();

            storyBoard.
            Setup(m => m.LoadFromSession <byte[]>(It.Is <SynchronizationStorySessionKey>(p => p == SynchronizationStorySessionKey.BinaryCloudRepository))).
            Returns(encryptedRepository);
            Mock <ISettingsService> settingsService = new Mock <ISettingsService>();

            settingsService.
            Setup(m => m.LoadSettingsOrDefault()).Returns(settingsModel);
            Mock <INoteRepositoryUpdater> updater = new Mock <INoteRepositoryUpdater>();

            // Run step
            var step = new DecryptCloudRepositoryStep(
                SynchronizationStoryStepId.DecryptCloudRepository,
                storyBoard.Object,
                CommonMocksAndStubs.LanguageService(),
                CommonMocksAndStubs.FeedbackService(),
                settingsService.Object,
                updater.Object);

            Assert.DoesNotThrowAsync(step.Run);

            // Repository has not changed and was not stored in session
            settingsService.Verify(m => m.TrySaveSettingsToLocalDevice(It.IsNotNull <SettingsModel>()), Times.Never);

            // Next step is called
            storyBoard.Verify(m => m.ContinueWith(It.Is <SynchronizationStoryStepId>(x => x == SynchronizationStoryStepId.IsSameRepository)), Times.Once);
        }
예제 #2
0
        public void MissingOrWrongTransfercodeLeadsToInputDialog()
        {
            const string transferCode  = "abcdefgh";
            var          settingsModel = CreateSettingsModel(null); // no transfer code at all

            byte[] encryptedRepository = CreateEncryptedRepository(transferCode);

            Mock <IStoryBoard> storyBoard = new Mock <IStoryBoard>();

            storyBoard.
            Setup(m => m.LoadFromSession <byte[]>(It.Is <SynchronizationStorySessionKey>(p => p == SynchronizationStorySessionKey.BinaryCloudRepository))).
            Returns(encryptedRepository);
            Mock <ISettingsService> settingsService = new Mock <ISettingsService>();

            settingsService.
            Setup(m => m.LoadSettingsOrDefault()).Returns(settingsModel);
            Mock <INoteRepositoryUpdater> updater = new Mock <INoteRepositoryUpdater>();

            // Run step
            var step = new DecryptCloudRepositoryStep(
                SynchronizationStoryStepId.DecryptCloudRepository,
                storyBoard.Object,
                CommonMocksAndStubs.LanguageService(),
                CommonMocksAndStubs.FeedbackService(),
                settingsService.Object,
                updater.Object);

            Assert.DoesNotThrowAsync(step.Run);

            // No changes should be done to the settings
            settingsService.Verify(m => m.TrySaveSettingsToLocalDevice(It.IsNotNull <SettingsModel>()), Times.Never);

            // Next step is called
            storyBoard.Verify(m => m.ContinueWith(It.Is <SynchronizationStoryStepId>(x => x == SynchronizationStoryStepId.ShowTransferCode)), Times.Once);

            // Run step with wrong transfer code
            settingsModel.TransferCode = "qqqqqqqq";
            Assert.DoesNotThrowAsync(step.Run);
            storyBoard.Verify(m => m.ContinueWith(It.Is <SynchronizationStoryStepId>(x => x == SynchronizationStoryStepId.ShowTransferCode)), Times.Exactly(2));
        }
예제 #3
0
        public void RepositoryTooNewForApplicationLeadsToErrorMessage()
        {
            const string transferCode  = "abcdefgh";
            var          settingsModel = CreateSettingsModel(transferCode);

            byte[] encryptedRepository = CreateEncryptedRepository(transferCode);

            Mock <IStoryBoard> storyBoard = new Mock <IStoryBoard>();

            storyBoard.
            Setup(m => m.LoadFromSession <byte[]>(It.Is <SynchronizationStorySessionKey>(p => p == SynchronizationStorySessionKey.BinaryCloudRepository))).
            Returns(encryptedRepository);
            Mock <IFeedbackService> feedbackService = new Mock <IFeedbackService>();
            Mock <ISettingsService> settingsService = new Mock <ISettingsService>();

            settingsService.
            Setup(m => m.LoadSettingsOrDefault()).Returns(settingsModel);
            Mock <INoteRepositoryUpdater> updater = new Mock <INoteRepositoryUpdater>();

            updater.
            Setup(m => m.IsTooNewForThisApp(It.IsAny <XDocument>())).
            Returns(true);

            // Run step
            var step = new DecryptCloudRepositoryStep(
                SynchronizationStoryStepId.DecryptCloudRepository,
                storyBoard.Object,
                CommonMocksAndStubs.LanguageService(),
                feedbackService.Object,
                settingsService.Object,
                updater.Object);

            Assert.DoesNotThrowAsync(step.Run);

            // Error message shown
            feedbackService.Verify(m => m.ShowToast(It.IsAny <string>()), Times.Once);

            // no next step is called
            storyBoard.Verify(m => m.ContinueWith(It.IsAny <SynchronizationStoryStepId>()), Times.Never);
        }
        public void InvalidRepositoryLeadsToErrorMessage()
        {
            const string transferCode  = "abcdefgh";
            var          settingsModel = CreateSettingsModel(transferCode);

            byte[] encryptedRepository = CreateEncryptedRepository(transferCode);
            encryptedRepository[8]++; // make it invalid

            Mock <IStoryBoard> storyBoard = new Mock <IStoryBoard>();

            storyBoard.
            Setup(m => m.LoadFromSession <byte[]>(It.Is <int>(p => p == SynchronizationStorySessionKey.BinaryCloudRepository.ToInt()))).
            Returns(encryptedRepository);
            Mock <IFeedbackService> feedbackService = new Mock <IFeedbackService>();
            Mock <ISettingsService> settingsService = new Mock <ISettingsService>();

            settingsService.
            Setup(m => m.LoadSettingsOrDefault()).Returns(settingsModel);
            Mock <INoteRepositoryUpdater> updater = new Mock <INoteRepositoryUpdater>();

            // Run step
            var step = new DecryptCloudRepositoryStep(
                SynchronizationStoryStepId.DecryptCloudRepository.ToInt(),
                storyBoard.Object,
                CommonMocksAndStubs.LanguageService(),
                feedbackService.Object,
                settingsService.Object,
                updater.Object);

            Assert.DoesNotThrowAsync(step.Run);

            // Error message shown
            feedbackService.Verify(m => m.ShowToast(It.IsAny <string>()), Times.Once);

            // No changes should be done to the settings
            settingsService.Verify(m => m.TrySaveSettingsToLocalDevice(It.IsNotNull <SettingsModel>()), Times.Never);

            // no next step is called
            storyBoard.Verify(m => m.ContinueWith(It.IsAny <int>()), Times.Never);
        }
예제 #5
0
        public void TransfercodeOfHistoryWillBeReused()
        {
            const string transferCode  = "abcdefgh";
            var          settingsModel = CreateSettingsModel("qqqqqqqq");

            settingsModel.TransferCodeHistory.Add(transferCode); // Good transfercode is in history
            byte[] encryptedRepository = CreateEncryptedRepository(transferCode);

            Mock <IStoryBoard> storyBoard = new Mock <IStoryBoard>();

            storyBoard.
            Setup(m => m.LoadFromSession <byte[]>(It.Is <SynchronizationStorySessionKey>(p => p == SynchronizationStorySessionKey.BinaryCloudRepository))).
            Returns(encryptedRepository);
            Mock <ISettingsService> settingsService = new Mock <ISettingsService>();

            settingsService.
            Setup(m => m.LoadSettingsOrDefault()).Returns(settingsModel);
            Mock <INoteRepositoryUpdater> updater = new Mock <INoteRepositoryUpdater>();

            // Run step
            var step = new DecryptCloudRepositoryStep(
                SynchronizationStoryStepId.DecryptCloudRepository,
                storyBoard.Object,
                CommonMocksAndStubs.LanguageService(),
                CommonMocksAndStubs.FeedbackService(),
                settingsService.Object,
                updater.Object);

            Assert.DoesNotThrowAsync(step.Run);

            // transfercode was moved from history to current and was stored
            Assert.AreEqual(transferCode, settingsModel.TransferCode);
            settingsService.Verify(m => m.TrySaveSettingsToLocalDevice(It.IsNotNull <SettingsModel>()), Times.Once);

            // Next step is called
            storyBoard.Verify(m => m.ContinueWith(It.Is <SynchronizationStoryStepId>(x => x == SynchronizationStoryStepId.IsSameRepository)), Times.Once);
        }