示例#1
0
        public async Task TestGet_NoWildcards_ReturnsOnlySpecifiedOrgs()
        {
            //arrange
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()),
                                                          TelemetryMock.InitializeMockTelemetryClient());
            var parameters = new[]
            {
                new RepositoryQueryParameter(this.orgOne_RepoOne),
                new RepositoryQueryParameter(this.orgTwo_RepoOne),
                new RepositoryQueryParameter(this.orgThree_RepoOne),
            };
            var repos = (await service.GetRepositories(parameters)).ToList();

            //act
            ManifestQueryResult result = await service.GetCurrentProjects(repos, "FindMe", false);

            //assert
            Assert.AreEqual(3, result.Projects.Count);
            Assert.AreEqual(1, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgOne_RepoOne.Id));
            Assert.AreEqual(0, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgOne_RepoTwo.Id));
            Assert.AreEqual(1, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgTwo_RepoOne.Id));
            Assert.AreEqual(0, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgTwo_RepoTwo.Id));
            Assert.AreEqual(1, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgThree_RepoOne.Id));
            Assert.AreEqual(0, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgThree_RepoTwo.Id));
            Assert.AreEqual(0, result.Projects.Count(x => x.RepositoryInfo.Id == this.orgThree_RepoThree.Id));
        }
        public async Task DefaultRepo_ShouldReturnTheSameIdButNewProperties()
        {
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            ProjectInfo        prj      = new ProjectInfo()
            {
                ProjectName     = "Project1",
                ProjectUri      = "SomeLocation",
                RepositoryId    = this.testRepoOne.Id,
                TargetExtension = "exe"
            };

            prj.Id.Should().Be(ObjectId.Empty);
            ProjectInfo returnedPrj = await database.Upsert(prj).ConfigureAwait(false);

            returnedPrj.Id.Should().NotBe(ObjectId.Empty);

            ProjectInfo prj2 = new ProjectInfo()
            {
                ProjectName     = "Project1",
                ProjectUri      = "SomeLocation",
                RepositoryId    = this.testRepoOne.Id,
                TargetExtension = "dll"
            };

            ProjectInfo returnedPrj2 = await database.Upsert(prj2).ConfigureAwait(false);

            returnedPrj2.Id.Should().BeEquivalentTo(returnedPrj.Id, "because it's the same project");

            ProjectInfo attempt3 = await database.GetById(returnedPrj2.Id.ToString()).ConfigureAwait(false);

            attempt3.TargetExtension.Should().Be("dll", "because the project was updated");
        }
示例#3
0
        public async Task SnapshotRepoProjects_SettingsChange_AffectsTheNumberOfProjectsLeft()
        {
            //arrange
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()), TelemetryMock.InitializeMockTelemetryClient());

            await SeedProjects(service, "Project1", this.snapshotRepoOne, "1.0.0", "2.0.0", "3.0.0", "4.0.0");

            SnapshotRepoCleaner cleaner = new SnapshotRepoCleaner(database);

            //assuming...
            Check.That(database.GetAllProjects().Result.Count()).Equals(4);

            //act
            SnapshotRepoCleanupResult result = await cleaner.PerformCleanupAsync(new SnapshotRepoCleanupSettings()
            {
                NumberOfSnapshotsToKeep = 3
            });

            //assert
            Check.That(result.RepositoryResults.Single().Value).IsEqualTo(1);
            Check.That(database.GetAllProjects().Result.Count()).Equals(3);

            //now change settings and run again

            //act
            result = await cleaner.PerformCleanupAsync(new SnapshotRepoCleanupSettings()
            {
                NumberOfSnapshotsToKeep = 1
            });

            //assert
            Check.That(result.RepositoryResults.Single().Value).IsEqualTo(2);
            Check.That(database.GetAllProjects().Result.Count()).Equals(1);
        }
示例#4
0
        public async Task CannotAddSameTwice_ShouldReturnTheSameId()
        {
            RepositoryDatabase database        = new RepositoryDatabase(Settings);
            string             organizationOne = Guid.NewGuid().ToString();
            string             repoOne         = Guid.NewGuid().ToString();
            RepositoryInfo     repo            = null;
            RepositoryInfo     repo2           = null;

            Task t1 = Task.Run(async() =>
            {
                repo = await database.UpsertUpdate(new RepositoryInfo()
                {
                    OrganizationName = organizationOne,
                    RepositoryName   = repoOne
                }
                                                   ).ConfigureAwait(false);
            });
            Task t2 = Task.Run(async() =>
            {
                repo2 = await database.UpsertUpdate(new RepositoryInfo()
                {
                    OrganizationName = organizationOne,
                    RepositoryName   = repoOne
                }
                                                    ).ConfigureAwait(false);
            });
            //add both repos pretty much at the same time
            await Task.WhenAll(t1, t2);

            repo.Should().NotBeNull("Because it should have been created by the tasks invoke");

            repo.Id.Should().NotBe(ObjectId.Empty);
            repo.Id.Should().Be(repo2.Id, "because the same repository already exists");
        }
示例#5
0
        private IRepository <UserProfile> Create()
        {
            var db    = DatabaseHelper.GetHelper("test");
            var repos = new RepositoryDatabase <UserProfile>(db);

            return(repos);
        }
示例#6
0
        public async Task DefaultRepoProjects_NotCleanedUp()
        {
            //arrange
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()), TelemetryMock.InitializeMockTelemetryClient());

            await SeedProjects(service, "Project1", this.defaultRepoOne, "1.0.0", "2.0.0", "3.0.0", "4.0.0");
            await SeedProjects(service, "Project2", this.defaultRepoOne, "1.0.0", "2.0.0", "3.0.0", "4.0.0");
            await SeedProjects(service, "Project3", this.defaultRepoOne, "1.0.0", "2.0.0", "3.0.0", "4.0.0");
            await SeedProjects(service, "Project4", this.defaultRepoOne, "1.0.0", "2.0.0", "3.0.0", "4.0.0");

            SnapshotRepoCleaner cleaner = new SnapshotRepoCleaner(database);

            //assuming...
            Check.That(database.GetAllProjects().Result.Count()).Equals(4);

            //act
            SnapshotRepoCleanupResult result = await cleaner.PerformCleanupAsync(new SnapshotRepoCleanupSettings()
            {
            });

            //assert
            Check.That(result.RepositoryResults.Count).IsEqualTo(0);
            Check.That(database.GetAllProjects().Result.Count()).Equals(4);
        }
        private async Task <WeatherModel> GetWeatherOfflineAsync()
        {
            try
            {
                var database  = new RepositoryDatabase();
                var currently = await database.GetAllItems <Currently>();

                var weather = new WeatherModel();
                weather.Daily = new Daily()
                {
                    Data = new List <DailyData>(await database.GetAllItems <DailyData>())
                };
                weather.Hourly = new Hourly()
                {
                    Data = new List <HourlyData>(await database.GetAllItems <HourlyData>())
                };
                weather.Currently = currently.FirstOrDefault();

                return(weather);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(null);
            }
        }
        private async Task CleanDb()
        {
            var database = new RepositoryDatabase();
            await database.DeleteAllItens <Currently>();

            await database.DeleteAllItens <DailyData>();

            await database.DeleteAllItens <HourlyData>();
        }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Обработчик события изменения репозитория
            /// </summary>
            /// <param name="sender">Источник события</param>
            /// <param name="args">Аргументы события</param>
            //---------------------------------------------------------------------------------------------------------
            private static void OnRepositoryChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
            {
                CubeXRepositoryDatabaseViewer data_viewer = (CubeXRepositoryDatabaseViewer)sender;
                RepositoryDatabase            new_value   = (RepositoryDatabase)args.NewValue;

                if (new_value != null)
                {
                    data_viewer.SetRepository();
                }
            }
        private static async Task SetSnapshotMode(RepositoryDatabase database, RepositoryInfo repository)
        {
            repository.RepositoryMode = RepositoryMode.Snapshot;

            await database.UpsertReplace(repository).ConfigureAwait(false);

            var repo = await database.GetRepositoryById(repository.Id).ConfigureAwait(false);

            repo.Should().BeEquivalentTo(repository);
            repo.RepositoryMode.Should().Be(RepositoryMode.Snapshot);
        }
示例#11
0
        public void IsnertOrUpdateTest()
        {
            var db          = DatabaseHelper.GetHelper("test");
            var repos       = new RepositoryDatabase <UserProfile>(db);
            var userprofile = Map.Create <UserProfile>();

            userprofile.Id       = 1;
            userprofile.Name     = "test";
            userprofile.Email    = "*****@*****.**";
            userprofile.FixPhone = "860108888888";
            userprofile.Sex      = 1;
            repos.Save(userprofile);
        }
示例#12
0
        public async Task ShouldReturnProperMode()
        {
            RepositoryDatabase service         = new RepositoryDatabase(Settings);
            string             organizationOne = MethodBase.GetCurrentMethod().Name;
            string             repoOne         = Guid.NewGuid().ToString();

            //first add a new repository to a new organization
            RepositoryInfo repo = await service.UpsertUpdate(
                new RepositoryInfo()
            {
                OrganizationName = organizationOne,
                RepositoryName   = repoOne
            }).ConfigureAwait(false);

            repo.RepositoryMode.Should().Be(RepositoryMode.Default);

            //then add it again
            RepositoryInfo repo2 = await service.UpsertUpdate(new RepositoryInfo()
            {
                OrganizationName = organizationOne,
                RepositoryName   = repoOne
            }).ConfigureAwait(false);

            repo2.RepositoryMode.Should().Be(RepositoryMode.Default);

            //then change the repo mode (ensure that change worked OK)
            repo.RepositoryMode = RepositoryMode.Snapshot;
            await service.UpsertReplace(repo).ConfigureAwait(false);

            repo = await service.GetRepository(organizationOne, repoOne);

            repo.RepositoryMode.Should().Be(RepositoryMode.Snapshot);

            //now perform upsert again and ensure that mode is not overwritten
            repo = await service.UpsertUpdate(new RepositoryInfo()
            {
                OrganizationName = organizationOne,
                RepositoryName   = repoOne
            }).ConfigureAwait(false);

            repo.RepositoryMode.Should().Be(RepositoryMode.Snapshot);

            //even if added multiple times
            repo = await service.UpsertUpdate(new RepositoryInfo()
            {
                OrganizationName = organizationOne,
                RepositoryName   = repoOne
            }).ConfigureAwait(false);

            repo.RepositoryMode.Should().Be(RepositoryMode.Snapshot);
        }
示例#13
0
        public void QueryTest3()
        {
            var db    = DatabaseHelper.GetHelper("test");
            var repos = new RepositoryDatabase <UserProfile>(db);

            var list1 = repos.GetList(x => (object)x.Id == new[] { 1, 2, 3, 4, 5 });
            //where Sex=1 and Name like 'test%'
            var list2 = repos.GetList(x => x.Sex == 1 && x.Name.StartsWith("test"), 1, 10, x => x.Id, true);
            var list3 = repos.GetList(x => x.Id > 1 && x.Id < 10 && (x.Sex == 1 || x.Sex == 2), 1, 10, x => x.Id, true, x => x.Id, true, x => x.Id, true);

            Assert.IsNotNull(list1);
            Assert.Greater(list1.Count, 0);
            Assert.IsNotNull(list1);
            Assert.Greater(list2.Count, 0);
        }
示例#14
0
        public void SetUp()
        {
            this.telemetryClient = TelemetryMock.InitializeMockTelemetryClient();
            MongoClient client = new MongoClient(Settings.ConnectionString);

            client.DropDatabase(Settings.DatabaseName);

            RepositoryDatabase database = new RepositoryDatabase(Settings);
            RepositoryInfo     result   = database.Create(this.testRepoOne);

            Assert.IsNotNull(result);
            RepositoryInfo result2 = database.Create(this.testRepoTwo);

            Assert.IsNotNull(result2);
        }
示例#15
0
        public void SetUp()
        {
            MongoClient client = new MongoClient(Settings.ConnectionString);

            client.DropDatabase(Settings.DatabaseName);

            RepositoryDatabase database = new RepositoryDatabase(Settings);
            RepositoryInfo     result   = database.Create(this.snapshotRepoOne);

            Assert.IsNotNull(result);
            RepositoryInfo result2 = database.Create(this.snapshotRepoTwo);

            Assert.IsNotNull(result2);
            RepositoryInfo result3 = database.Create(this.defaultRepoOne);

            Assert.IsNotNull(result3);
        }
示例#16
0
        public async Task SnapshotModeSetFromStart()
        {
            RepositoryDatabase service         = new RepositoryDatabase(Settings);
            string             organizationOne = MethodBase.GetCurrentMethod().Name;
            string             repoOne         = Guid.NewGuid().ToString();

            //add a new repository with snapshot mode
            RepositoryInfo repo = await service.UpsertUpdate(
                new RepositoryInfo()
            {
                OrganizationName = organizationOne,
                RepositoryName   = repoOne,
                RepositoryMode   = RepositoryMode.Snapshot
            }).ConfigureAwait(false);

            repo.RepositoryMode.Should().Be(RepositoryMode.Snapshot);
        }
示例#17
0
        public void UpdateTest()
        {
            var db          = DatabaseHelper.GetHelper("test");
            var repos       = new RepositoryDatabase <UserProfile>(db);
            var userprofile = Map.Create <UserProfile>();

            /*
             * 修改一行数据时,Map.Create<UserProfile>()与new UserProfile()对象完全会达到不一样的效果。
             * 以下场景是所有表操作经常出现的一种,
             * Map.Create<UserProfile>()创建的对象,Repository会知道对象哪些属性被赋值过,只生成有过赋值的属性。
             *      如:UPDATE UserProfile SET Email=@email WHERE Id=@id
             * 如果使用new UserProfile()
             *      如:UPDATE UserProfile SET Name=@name,Email=@email,FixPhone=@fixphone....... WHERE Id=@id
             */
            userprofile.Id    = 1;
            userprofile.Email = "*****@*****.**";
            repos.Update(userprofile);
        }
示例#18
0
        public void QueryTest2()
        {
            var db    = DatabaseHelper.GetHelper("test");
            var repos = new RepositoryDatabase <UserProfile>(db);

            var obj1 = repos.Get(1);
            var obj2 = repos.Get(x => x.Email == "*****@*****.**" && x.Sex == 1);

            var list1 = repos.GroupbyCount <int>(x => x.Sex, x => x.Id > 1 && x.Id < 1000);

            var list2 = repos.GroupbyMax <int, int>(x => x.Sex, x => x.Id, x => x.Id > 1 && x.Id < 1000);

            var list3 = repos.GroupbySum <int, int>(x => x.Sex, x => x.Id, x => x.Id > 1 && x.Id < 1000);

            var sumValue = repos.Sum <int>(x => x.Id, x => x.Id > 1 && x.Id < 1000 && x.Sex == 1);

            var maxValue = repos.Max <int>(x => x.Id, x => x.Id > 1 && x.Id < 1000 && x.Sex == 1);
        }
示例#19
0
 private async Task SeedProjects(RepositoryDatabase database, RepositoryInfo repo)
 {
     ProjectInfo prj = new ProjectInfo()
     {
         ProjectName  = $"{repo.OrganizationName}_{repo.RepositoryName}_Prj",
         RepositoryId = repo.Id,
         Components   =
         {
             new ComponentManifest()
             {
                 Tags = new List <string>()
                 {
                     "FindMe"
                 }
             }
         }
     };
     await database.Upsert(prj).ConfigureAwait(false);
 }
        private async Task SaveWeatherOffline(WeatherModel weather)
        {
            try
            {
                //Limpo os dados do banco para não ter duplicidade, e garantir que sempre terá os dados mais novos.
                await CleanDb();

                var database = new RepositoryDatabase();

                await database.SaveItem(weather.Currently);

                await database.SaveList(weather.Daily.Data, RepositoryDatabase.ActionDb.Insert);

                await database.SaveList(weather.Hourly.Data, RepositoryDatabase.ActionDb.Insert);
            }
            catch (Exception e)
            {
                Console.WriteLine("Não foi possível salvar os dados no SQLITE");
                Console.WriteLine(e.Message);
            }
        }
        public async Task SnapshotRepo_ShouldOnlyReturnLastProjects()
        {
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()), this.telemetryClient);

            await SetSnapshotMode(database, this.testRepoOne).ConfigureAwait(false);

            var allProjects = await service.GetAllCurrentProjects(this.testRepoOne).ConfigureAwait(false);

            allProjects.Projects.Count.Should().Be(0, "because there are no projects yet");

            ProjectInfo returnedPrj2 = await this.AddTwoProjectsWithSameRepoStamp(service).ConfigureAwait(false);

            //now add just one with new stamp
            RepoCat.Transmission.Models.ProjectInfo prj2Again = new RepoCat.Transmission.Models.ProjectInfo()
            {
                ProjectName    = "Project2",
                ProjectUri     = "SomeLocation",
                RepositoryInfo = new RepoCat.Transmission.Models.RepositoryInfo()
                {
                    RepositoryName   = this.testRepoOne.RepositoryName,
                    OrganizationName = this.testRepoOne.OrganizationName,
                },

                TargetExtension = "exe",
                RepositoryStamp = "2.0"
            };
            var returnedPrj2Again = await service.Upsert(prj2Again).ConfigureAwait(false);

            allProjects = await service.GetAllCurrentProjects(this.testRepoOne).ConfigureAwait(false);


            allProjects.Projects.Count.Should().Be(1, "because recently only added 1 project");
            allProjects.Projects.Should().OnlyContain(x => x.ProjectInfo.RepositoryStamp == "2.0");

            returnedPrj2Again.Id.Should().NotBe(returnedPrj2.Id);
            returnedPrj2Again.ProjectUri.Should().Be(returnedPrj2.ProjectUri);
            returnedPrj2Again.ProjectName.Should().Be(returnedPrj2.ProjectName);
            returnedPrj2Again.RepositoryId.Should().Be(returnedPrj2.RepositoryId);
        }
示例#22
0
        public async Task TestMultipleRepos_RelevantProjectsDeleted()
        {
            //arrange
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()), TelemetryMock.InitializeMockTelemetryClient());

            await SeedProjects(service, "Project1", this.snapshotRepoOne, "1.0.0", "2.0.0", "3.0.0");
            await SeedProjects(service, "Project2", this.snapshotRepoOne, "1.0.0");
            await SeedProjects(service, "Project3", this.snapshotRepoTwo, "1.0.0", "2.0.0", "3.0.0", "4.0.0");
            await SeedProjects(service, "Project4", this.snapshotRepoTwo, "1.0.0", "4.0.0");
            await SeedProjects(service, "Project5", this.defaultRepoOne, "1.0.0", "5.0.0");

            SnapshotRepoCleaner cleaner = new SnapshotRepoCleaner(database);

            //assuming...
            Check.That(database.GetAllProjects().Result.Count()).Equals(11);

            //act
            SnapshotRepoCleanupResult result = await cleaner.PerformCleanupAsync(new SnapshotRepoCleanupSettings());

            //assert
            Check.That(result.RepositoryResults.Keys.Select(x => x.RepositoryName)).ContainsExactly(this.snapshotRepoOne.RepositoryName, this.snapshotRepoTwo.RepositoryName);
            Check.That(result.RepositoryResults.Single(x => x.Key.Id == this.snapshotRepoOne.Id).Value.Equals(2));
            Check.That(result.RepositoryResults.Single(x => x.Key.Id == this.snapshotRepoTwo.Id).Value.Equals(3));

            var allProjects = database.GetAllProjects().Result.ToList();

            Check.That(allProjects.Count()).Equals(6);

            Check.That(allProjects.Where(x => x.RepositoryId == this.snapshotRepoOne.Id).Select(x => x.ProjectName))
            .ContainsExactly("Project1", "Project1");

            Check.That(allProjects.Where(x => x.RepositoryId == this.snapshotRepoTwo.Id).Select(x => x.ProjectName))
            .ContainsExactly("Project3", "Project3", "Project4");

            Check.That(allProjects.Where(x => x.RepositoryId == this.defaultRepoOne.Id).Select(x => x.ProjectName))
            .ContainsExactly("Project5");
        }
示例#23
0
        public void IsnertTest()
        {
            var db          = DatabaseHelper.GetHelper("test");
            var repos       = new RepositoryDatabase <UserProfile>(db);
            var userprofile = Map.Create <UserProfile>();

            /*
             * Map.Create<UserProfile>()创建一个实体对象,与 new UserProfile()类似。
             * 但它们不同在于,Map.Create<UserProfile>()创建的对象可以探测到只赋值过的属性
             */
            userprofile.Name     = "test";
            userprofile.Email    = "*****@*****.**";
            userprofile.FixPhone = "860108888888";
            userprofile.Sex      = 1;
            repos.Insert(userprofile);

            var insertedUser = repos.Get(userprofile.Id);

            Assert.IsNotNull(insertedUser);
            Assert.AreEqual(userprofile.Id, insertedUser.Id);
            Assert.AreEqual(userprofile.Name, insertedUser.Name);
            Assert.AreEqual(userprofile.Email, insertedUser.Email);
            Assert.AreEqual(userprofile.FixPhone, insertedUser.FixPhone);
        }
示例#24
0
        public void SetUp()
        {
            MongoClient client = new MongoClient(Settings.ConnectionString);

            client.DropDatabase(Settings.DatabaseName);

            RepositoryDatabase database = new RepositoryDatabase(Settings);
            RepositoryInfo     result   = database.Create(this.orgOne_RepoOne);

            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgOne_RepoTwo);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgTwo_RepoOne);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgTwo_RepoTwo);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgThree_RepoOne);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgThree_RepoTwo);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();

            result = database.Create(this.orgThree_RepoThree);
            Assert.IsNotNull(result);
            this.SeedProjects(database, result).GetAwaiter().GetResult();
        }
示例#25
0
            static async Task <int> getRepositoryDatabaseCount(RepositoryDatabase repositoryDatabase)
            {
                var repositories = await repositoryDatabase.GetRepositories().ConfigureAwait(false);

                return(repositories.Count());
            }
示例#26
0
 public RepositoryManagementService(RepositoryDatabase database, IMapper mapper, TelemetryClient telemetryClient)
 {
     this.database        = database;
     this.mapper          = mapper;
     this.telemetryClient = telemetryClient;
 }
示例#27
0
 public Repository(RepositoryDatabase database)
 {
     _database = database;
 }
示例#28
0
 public Store(RepositoryDatabase repository)
 {
     this.repository = repository;
 }
        public async Task DefaultRepo_ShouldReturnUpdatedProjects()
        {
            RepositoryDatabase database = new RepositoryDatabase(Settings);
            var service     = new RepositoryManagementService(database, new Mapper(MappingConfigurationFactory.Create()), this.telemetryClient);
            var allProjects = await service.GetAllCurrentProjects(this.testRepoOne).ConfigureAwait(false);

            allProjects.Projects.Count.Should().Be(0, "because there are no projects yet");

            await this.AddTwoProjectsWithSameRepoStamp(service).ConfigureAwait(false);

            ProjectInfo returnedPrj2 = await this.AddTwoProjectsWithSameRepoStamp(service).ConfigureAwait(false);

            //now add just one with new stamp and some changed properties (except for name and URI)
            RepoCat.Transmission.Models.ProjectInfo prj2Again = new RepoCat.Transmission.Models.ProjectInfo()
            {
                ProjectName        = "Project2",
                ProjectUri         = "SomeLocation",
                Owner              = "An Owner",
                ProjectDescription = "A description",
                RepositoryInfo     = new RepoCat.Transmission.Models.RepositoryInfo()
                {
                    RepositoryName   = this.testRepoOne.RepositoryName,
                    OrganizationName = this.testRepoOne.OrganizationName,
                },

                TargetExtension = "exe",
                RepositoryStamp = "2.0",
                AssemblyName    = "Project2AssName_NEW",
                Components      =
                {
                    new ComponentManifest(new List <string>()
                    {
                        "Three", "Four"
                    }, new PropertiesCollection()
                    {
                        { "KeyTwo", "ValueTwo" }
                    }
                                          )
                }
            };

            var returnedPrj2Again = await service.Upsert(prj2Again).ConfigureAwait(false);

            allProjects = await service.GetAllCurrentProjects(this.testRepoOne).ConfigureAwait(false);


            allProjects.Projects.Count.Should().Be(2, "because we don't return latest stamp only");
            allProjects.Projects.Should().Contain(x => x.ProjectInfo.RepositoryStamp == "2.0");
            allProjects.Projects.Should().Contain(x => x.ProjectInfo.RepositoryStamp == "1.0");

            returnedPrj2Again.Id.Should().Be(returnedPrj2.Id);
            returnedPrj2Again.ProjectUri.Should().Be(returnedPrj2.ProjectUri);
            returnedPrj2Again.ProjectName.Should().Be(returnedPrj2.ProjectName);
            returnedPrj2Again.RepositoryId.Should().Be(returnedPrj2.RepositoryId);

            var prj2ReturnedFromQuery = allProjects.Projects.Single(x => string.Equals(x.ProjectInfo.ProjectName, "Project2", StringComparison.Ordinal));

            prj2ReturnedFromQuery.ProjectInfo.Id.Should().Be(returnedPrj2Again.Id);
            prj2ReturnedFromQuery.ProjectInfo.RepositoryStamp.Should().Be("2.0");
            prj2ReturnedFromQuery.ProjectInfo.AssemblyName.Should().Be("Project2AssName_NEW");
            prj2ReturnedFromQuery.ProjectInfo.Components.Single().Tags.Count.Should().Be(2);
            prj2ReturnedFromQuery.ProjectInfo.Components.Single().Properties.Count.Should().Be(1);
            prj2ReturnedFromQuery.ProjectInfo.Components.Single().Properties["KeyTwo"].Should().Be("ValueTwo");
            prj2ReturnedFromQuery.ProjectInfo.Owner.Should().Be("An Owner");
            prj2ReturnedFromQuery.ProjectInfo.ProjectDescription.Should().Be("A description");
        }
示例#30
0
 public SnapshotRepoCleaner(RepositoryDatabase database) => this.database = database;