Exemple #1
0
        public void get_latest_version_forwards_call_onto_version_repository()
        {
            var dataStoreVersionRepository = new DataStoreVersionRepositoryMock(MockBehavior.Loose);

            dataStoreVersionRepository
            .When(x => x.GetLatest())
            .Return(
                new DataStoreVersionEntityBuilder()
                .WithMajor(2)
                .WithMinor(1)
                .WithBuild(3));
            var sut = new DataStoreServiceBuilder()
                      .WithDataStoreScheduler(ImmediateScheduler.Instance)
                      .WithDataStoreVersionRepository(dataStoreVersionRepository)
                      .Build();

            var result = sut
                         .GetLatestVersion()
                         .FirstAsync()
                         .Wait();

            Assert.Equal(2, result.Version.Major);
            Assert.Equal(1, result.Version.Minor);
            Assert.Equal(3, result.Version.Build);
        }
Exemple #2
0
        public void upgrade_records_versions()
        {
            var scheduler = new TestScheduler();
            var dataStoreVersionRepository = new DataStoreVersionRepositoryMock(MockBehavior.Loose);
            var upgradeHandler1            = new UpgradeHandlerMock(MockBehavior.Loose);
            var upgradeHandler2            = new UpgradeHandlerMock(MockBehavior.Loose);

            upgradeHandler1
            .When(x => x.Version)
            .Return(new Version(1, 0, 0));
            upgradeHandler2
            .When(x => x.Version)
            .Return(new Version(2, 0, 1));
            var sut = new DataStoreServiceBuilder()
                      .WithDataStoreScheduler(scheduler)
                      .WithDataStoreVersionRepository(dataStoreVersionRepository)
                      .WithUpgradeHandlers(upgradeHandler1, upgradeHandler2)
                      .Build();

            sut
            .Upgrade()
            .Subscribe();
            scheduler.AdvanceMinimal();

            dataStoreVersionRepository
            .Verify(x => x.Save(It.Matches <DataStoreVersionEntity>(y => y.Major == 1 && y.Minor == 0 && y.Build == 0)))
            .WasCalledExactlyOnce();
            dataStoreVersionRepository
            .Verify(x => x.Save(It.Matches <DataStoreVersionEntity>(y => y.Major == 2 && y.Minor == 0 && y.Build == 1)))
            .WasCalledExactlyOnce();
        }
Exemple #3
0
        public void upgrade_applies_relevant_upgrades_only(string[] existingVersions, string[] availableVersions, bool[] applyExpected)
        {
            Assert.Equal(availableVersions.Length, applyExpected.Length);

            var scheduler = new TestScheduler();
            var versions  = existingVersions
                            .Select(
                x =>
                new DataStoreVersionEntityBuilder()
                .WithVersion(Version.Parse(x))
                .Build())
                            .ToImmutableList();
            var dataStoreVersionRepository = new DataStoreVersionRepositoryMock(MockBehavior.Loose);

            dataStoreVersionRepository
            .When(x => x.GetAll())
            .Return(versions);
            dataStoreVersionRepository
            .When(x => x.GetLatest())
            .Return(versions.Last());
            var upgradeHandlers = availableVersions
                                  .Select(
                x =>
            {
                var mock = new UpgradeHandlerMock(MockBehavior.Loose);
                mock
                .When(y => y.Version)
                .Return(Version.Parse(x));
                return(mock);
            })
                                  .ToArray();
            var sut = new DataStoreServiceBuilder()
                      .WithDataStoreScheduler(scheduler)
                      .WithDataStoreVersionRepository(dataStoreVersionRepository)
                      .WithUpgradeHandlers(upgradeHandlers)
                      .Build();

            sut
            .Upgrade()
            .Subscribe();
            scheduler.AdvanceMinimal();

            for (var i = 0; i < availableVersions.Length; ++i)
            {
                var upgradeHandler = upgradeHandlers[i];

                if (applyExpected[i])
                {
                    upgradeHandler
                    .Verify(x => x.Apply(sut.Connection))
                    .WasCalledExactlyOnce();
                }
                else
                {
                    upgradeHandler
                    .Verify(x => x.Apply(sut.Connection))
                    .WasNotCalled();
                }
            }
        }
Exemple #4
0
        public void get_latest_version_returns_zero_version_if_version_repository_indicates_the_data_store_does_not_yet_exist()
        {
            var dataStoreVersionRepository = new DataStoreVersionRepositoryMock(MockBehavior.Loose);

            dataStoreVersionRepository
            .When(x => x.Exists())
            .Return(false);
            var sut = new DataStoreServiceBuilder()
                      .WithDataStoreScheduler(ImmediateScheduler.Instance)
                      .WithDataStoreVersionRepository(dataStoreVersionRepository)
                      .Build();

            var result = sut
                         .GetLatestVersion()
                         .FirstAsync()
                         .Wait();

            Assert.NotNull(result);
            Assert.Equal(0, result.Version.Major);
            Assert.Equal(0, result.Version.Minor);
            Assert.Equal(0, result.Version.Build);
        }