public void CreateSchema_WhenFirstLevelIdentity_ReturnsSchemaWithIdentityAccessor()
        {
            var builder = new AutoSchemaBuilder<WithIdentity>();

            var schema = builder.CreateSchema();

            Assert.AreEqual(IdTypes.Identity, schema.IdAccessor.IdType);
            Assert.IsNotNull(schema.IdAccessor);
        }
        public void CreateSchema_WhenIdentityItemHasNoIndexableFirstLevelProperties_ThrowsMissingIndexableMembersException()
        {
            var builder = new AutoSchemaBuilder<WithOnlyIdentity>();

            var ex = CustomAssert.Throws<SisoDbException>(
                () => builder.CreateSchema());

            var expectedMessage = string.Format(ExceptionMessages.AutoSchemaBuilder_MissingIndexableMembers, "WithOnlyIdentity");
            Assert.AreEqual(expectedMessage, ex.Message);
        }
        public void CreateSchema_WhenByteMember_IndexAccessorIsCreatedForByteMember()
        {
            var builder = new AutoSchemaBuilder<WithByte>();

            var schema = builder.CreateSchema();

            var byteIac = schema.IndexAccessors.SingleOrDefault(iac => iac.Path == "Byte");
            Assert.IsNotNull(byteIac);
            Assert.IsTrue(byteIac.DataType.IsByteType());
        }
        public void CreateSchema_WhenByteArrayMember_NoIndexAccessorIsCreatedForByteArrayMember()
        {
            var builder = new AutoSchemaBuilder<WithBytes>();

            var ex = Assert.Throws<SisoDbException>(() => builder.CreateSchema());

            Assert.AreEqual(
                ExceptionMessages.AutoSchemaBuilder_MissingIndexableMembers.Inject("WithBytes"),
                ex.Message);
        }
        public void CreateSchema_WhenItemHasIndexableFirstLevelProperties_IndexAccessorsAreExtracted()
        {
            var builder = new AutoSchemaBuilder<WithIdAndIndexableFirstLevelMembers>();

            var schema = builder.CreateSchema();

            CustomAssert.IsNotEmpty(schema.IndexAccessors);
        }
        public void CreateSchema_WhenItemHasIdMember_CreatesSchemaWithKeyMemberAccessor()
        {
            var builder = new AutoSchemaBuilder<WithIdAndIndexableFirstLevelMembers>();

            var schema = builder.CreateSchema();

            Assert.IsNotNull(schema.IdAccessor);
        }
        public void CreateSchema_WhenThirdLevelIndexablePropertiesExists_PathReflectsHierarchy()
        {
            var builder = new AutoSchemaBuilder<WithFirstSecondAndThirdLevelMembers>();

            var schema = builder.CreateSchema();

            var thirdLevelItems = schema.IndexAccessors.Where(iac => iac.Level == 2);
            CustomAssert.ForAll(thirdLevelItems, iac => iac.Path.StartsWith("SecondLevelItem.ThirdLevelItem."));
        }
        public void CreateSchema_WhenThirdLevelIndexablePropertiesExists_IndexAccessorsAreCreated()
        {
            var builder = new AutoSchemaBuilder<WithFirstSecondAndThirdLevelMembers>();

            var schema = builder.CreateSchema();

            var hasThirdLevelAccessors = schema.IndexAccessors.Any(iac => iac.Level == 2);
            Assert.IsTrue(hasThirdLevelAccessors);
        }
        public void CreateSchema_WhenNestedType_SchemaNameReflectsTypeName()
        {
            const string expectedName = "WithIdAndIndexableFirstLevelMembers";
            var builder = new AutoSchemaBuilder<WithIdAndIndexableFirstLevelMembers>();

            var schema = builder.CreateSchema();

            Assert.AreEqual(expectedName, schema.Name);
        }
        public void CreateSchema_WhenItemHasNoIdMember_ThrowsMissingKeyMemberException()
        {
            var builder = new AutoSchemaBuilder<WithNoId>();

            var ex = CustomAssert.Throws<SisoDbException>(() => builder.CreateSchema());

            var expectedMessage = string.Format(ExceptionMessages.AutoSchemaBuilder_MissingIdMember, "WithNoId");
            Assert.AreEqual(expectedMessage, ex.Message);
        }