Inheritance: IRecordService
        public void should_count_records_with_duplicate_titles()
        {
            var service = new RecordService(Db, new RecordValidator());

            var record1 = new Record().With(r =>
            {
                r.Id = new Guid("7ce85158-f6f9-491d-902e-b3f2c8bb5264");
                r.Path = @"X:\path\to\duplicate\record\1";
                r.Gemini = new Metadata().With(m =>
                {
                    m.Title = "This is a duplicate record";
                    m.Keywords.Add(new MetadataKeyword { Vocab = "http://vocab.jncc.gov.uk/jncc-domain", Value = "Marine" });
                    m.Keywords.Add(new MetadataKeyword { Vocab = "http://vocab.jncc.gov.uk/jncc-category", Value = "Example" });
                });
            });
            var record2 = new Record().With(r =>
            {
                r.Id = new Guid("afb4ebbf-4286-47ed-b09f-a4d40af139e1");
                r.Path = @"X:\path\to\duplicate\record\2";
                r.Gemini = new Metadata().With(m =>
                {
                    m.Title = "This is a duplicate record";
                    m.Keywords.Add(new MetadataKeyword { Vocab = "http://vocab.jncc.gov.uk/jncc-domain", Value = "Marine" });
                    m.Keywords.Add(new MetadataKeyword { Vocab = "http://vocab.jncc.gov.uk/jncc-category", Value = "Example" });
                });
            });

            service.Insert(record1);
            service.Insert(record2);

            Db.SaveChanges();
            RavenUtility.WaitForIndexing(Db);

            var results = Db.Query<RecordsWithDuplicateTitleCheckerIndex.Result, RecordsWithDuplicateTitleCheckerIndex>()
                .Where(x => x.Count > 1)
                .Take(100)
                .ToList();

            // looks like we have some duplicates created by the seeder!
            results.Count.Should().BeInRange(1, 10); // perhaps prevent more duplicate titles being seeded in the future!
            results.Should().Contain(r => r.Title == "This is a duplicate record");
        }
示例#2
0
        public void should_store_empty_bounding_box_as_null_wkt()
        {
            // to avoid raven / lucene indexing errors

            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            service.Upsert(BasicRecord());

            Mock.Get(database).Verify(db => db.Store(It.Is((Record r) => r.Wkt == null)));
        }
示例#3
0
        public void should_store_valid_record_in_the_database()
        {
            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            var record = BasicRecord();
            service.Upsert(record);

            Mock.Get(database).Verify(db => db.Store(record));
        }
示例#4
0
        public void should_standardise_unconditional_use_constraints()
        {
            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            var record = BasicRecord().With(r => r.Gemini.UseConstraints = "   No conditions APPLY");
            service.Upsert(record);

            Mock.Get(database).Verify(db => db.Store(It.Is((Record r) => r.Gemini.UseConstraints == "no conditions apply")));
        }
示例#5
0
        public void should_store_bounding_box_as_wkt()
        {
            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            var e = Library.Example();
            var record = new Record { Gemini = e };

            service.Upsert(record);

            string expectedWkt = BoundingBoxUtility.ToWkt(e.BoundingBox);
            Mock.Get(database).Verify(db => db.Store(It.Is((Record r) => r.Wkt == expectedWkt)));
        }
示例#6
0
        public void should_set_security_to_official_by_default()
        {
            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            service.Upsert(BasicRecord());

            Mock.Get(database).Verify(db => db.Store(It.Is((Record r) => r.Security == Security.Official)));
        }
示例#7
0
        public void should_save_keywords_in_correct_order()
        {
            // should be sorted by vocab, then value, but with distinguished jncc vocabs first!
            // finally, keywords with no namespace should be last

            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            var record = BasicRecord().With(r =>
                {
                    r.Gemini.Keywords = new StringPairList
                        {
                            { "a-vocab-beginning-with-a", "bravo" },
                            { "boring-vocab-beginning-with-b", "some-keyword" },
                            { "a-vocab-beginning-with-a", "alpha" },
                            { "http://vocab.jncc.gov.uk/jncc-category", "bravo" },
                            { "http://vocab.jncc.gov.uk/jncc-category", "alpha" },
                            { "http://vocab.jncc.gov.uk/jncc-domain", "some-domain" },
                            { "", "some-keyword" },
                        }.ToKeywordList();
                });

            service.Upsert(record);

            var expected = new StringPairList
                {
                    { "http://vocab.jncc.gov.uk/jncc-domain", "some-domain" },
                    { "http://vocab.jncc.gov.uk/jncc-category", "alpha" },
                    { "http://vocab.jncc.gov.uk/jncc-category", "bravo" },
                    { "a-vocab-beginning-with-a", "alpha" },
                    { "a-vocab-beginning-with-a", "bravo" },
                    { "boring-vocab-beginning-with-b", "some-keyword" },
                    { "", "some-keyword" },
                }.ToKeywordList();

            Mock.Get(database).Verify(db => db.Store(It.Is((Record r) => r.Gemini.Keywords.IsEqualTo(expected))));
        }
示例#8
0
        public void should_return_record_in_result()
        {
            // so we can pass the possibly modified record back to the client
            // without an unnecessary fetch from the database

            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, ValidatorStub());

            var record = BasicRecord();
            var result = service.Upsert(record);

            result.Record.Should().Be(record);
        }
示例#9
0
        public void should_not_store_invalid_record_in_the_database()
        {
            var database = Mock.Of<IDocumentSession>();
            var service = new RecordService(database, FailingValidatorStub());

            service.Upsert(BasicRecord());

            Mock.Get(database).Verify(db => db.Store(It.IsAny<Record>()), Times.Never);
        }
示例#10
0
        public void should_fail_when_record_is_readonly()
        {
            var service = new RecordService(Mock.Of<IDocumentSession>(), Mock.Of<IRecordValidator>());
            var record = new Record { ReadOnly = true };

            service.Invoking(s => s.Update(record))
                .ShouldThrow<InvalidOperationException>()
                .WithMessage("Cannot update a read-only record.");
        }