// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace ProductivityApiUnitTests
{
using System;
using System.Data.Entity;
using System.Data.Entity.Internal;
using System.Data.Entity.Internal.Linq;
using System.Data.Entity.ModelConfiguration.Internal.UnitTests;
using System.Data.Entity.Resources;
using Moq;
using Xunit;
///
/// Unit tests for and .
/// Note that some tests that would normally be unit tests are in the functional tests project because they
/// were created before the functional/unit division.
///
public class DbSetTests : TestBase
{
public class Add_Generic
{
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new DbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Add(entity);
Assert.Same(entity, retVal);
}
}
public class Add_NonGeneric
{
[Fact]
public void With_wrong_type_throws()
{
var set = new Mock
{
CallBase = true
}
.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbSet_BadTypeForAddAttachRemove("Add", "String", "FakeEntity"),
Assert.Throws(() => set.Add("Bang!")).Message);
}
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new InternalDbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Add(entity);
Assert.Same(entity, retVal);
}
}
public class Attach_Generic
{
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new DbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Attach(entity);
Assert.Same(entity, retVal);
}
}
public class Attach_NonGeneric
{
[Fact]
public void With_wrong_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbSet_BadTypeForAddAttachRemove("Attach", "String", "FakeEntity"),
Assert.Throws(() => set.Attach("Bang!")).Message);
}
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new InternalDbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Attach(entity);
Assert.Same(entity, retVal);
}
}
public class Remove_Generic
{
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new DbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Remove(entity);
Assert.Same(entity, retVal);
}
}
public class Remove_NonGeneric
{
[Fact]
public void With_wrong_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbSet_BadTypeForAddAttachRemove("Remove", "String", "FakeEntity"),
Assert.Throws(() => set.Remove("Bang!")).Message);
}
[Fact]
public void With_valid_entity_returns_the_added_entity()
{
var set = new InternalDbSet(new Mock>().Object);
var entity = new FakeEntity();
var retVal = set.Remove(entity);
Assert.Same(entity, retVal);
}
}
public class Create_Generic
{
[Fact]
public void With_same_type_returns_non_null_object()
{
var internalContextMock = new Mock
{
CallBase = true
};
internalContextMock.Setup(m => m.CreateObject()).Returns(new FakeEntity());
var internalSetMock = new Mock>(internalContextMock.Object);
internalSetMock.Setup(m => m.InternalContext).Returns(internalContextMock.Object);
var set = new DbSet(internalSetMock.Object);
Assert.NotNull(set.Create());
}
[Fact]
public void With_derived_type_returns_non_null_object()
{
var internalContextMock = new Mock
{
CallBase = true
};
internalContextMock.Setup(m => m.CreateObject()).Returns(new FakeDerivedEntity());
var internalSetMock = new Mock>(internalContextMock.Object);
internalSetMock.Setup(m => m.InternalContext).Returns(internalContextMock.Object);
var set = new DbSet(internalSetMock.Object);
Assert.IsType(set.Create());
}
}
public class Create_NonGeneric
{
[Fact]
public void With_null_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal("derivedEntityType", Assert.Throws(() => set.Create(null)).ParamName);
}
[Fact]
public void With_wrong_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbSet_BadTypeForCreate("String", "FakeEntity"),
Assert.Throws(() => set.Create(typeof(string))).Message);
}
[Fact]
public void With_same_type_returns_non_null_object()
{
var internalContextMock = new Mock
{
CallBase = true
};
internalContextMock.Setup(m => m.CreateObject()).Returns(new FakeEntity());
var internalSetMock = new Mock>(internalContextMock.Object);
internalSetMock.Setup(m => m.InternalContext).Returns(internalContextMock.Object);
var set = new InternalDbSet(internalSetMock.Object);
Assert.NotNull(set.Create());
}
[Fact]
public void With_derived_type_returns_non_null_object()
{
var internalContextMock = new Mock
{
CallBase = true
};
internalContextMock.Setup(m => m.CreateObject()).Returns(new FakeDerivedEntity());
var internalSetMock = new Mock>(internalContextMock.Object);
internalSetMock.Setup(m => m.InternalContext).Returns(internalContextMock.Object);
var set = new InternalDbSet(internalSetMock.Object);
Assert.IsType(set.Create(typeof(FakeDerivedEntity)));
}
}
public class Cast
{
[Fact]
public void With_wrong_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbEntity_BadTypeForCast("DbSet", "String", "FakeEntity"),
Assert.Throws(() => set.Cast()).Message);
}
[Fact]
public void With_derived_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeEntity));
Assert.Equal(
Strings.DbEntity_BadTypeForCast("DbSet", "FakeDerivedEntity", "FakeEntity"),
Assert.Throws(() => set.Cast()).Message);
}
[Fact]
public void With_base_type_throws()
{
var set = new Mock
{
CallBase = true
}.Object.Owner.Set(typeof(FakeDerivedEntity));
Assert.Equal(
Strings.DbEntity_BadTypeForCast("DbSet", "FakeEntity", "FakeDerivedEntity"),
Assert.Throws(() => set.Cast()).Message);
}
[Fact]
public void With_same_type_returns_generic_DbSet()
{
var internalContextMock = new Mock
{
CallBase = true
};
var internalSetMock = new Mock>(internalContextMock.Object);
internalSetMock.Setup(m => m.InternalContext).Returns(internalContextMock.Object);
var set = new InternalDbSet(internalSetMock.Object);
Assert.IsType>(set.Cast());
}
}
public class SqlQuery_Generic
{
[Fact]
public void With_null_SQL_string_throws()
{
var set = new DbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery(null)).Message);
}
[Fact]
public void With_empty_SQL_string_throws()
{
var set = new DbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery("")).Message);
}
[Fact]
public void With_whitespace_SQL_string_throws()
{
var set = new DbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery(" ")).Message);
}
[Fact]
public void With_null_parameters_throws()
{
var set = new DbSet(new Mock>().Object);
Assert.Equal("parameters", Assert.Throws(() => set.SqlQuery("query", null)).ParamName);
}
[Fact]
public void With_valid_arguments_doesnt_throw()
{
var set = new DbSet(new Mock>().Object);
var query = set.SqlQuery("query");
Assert.NotNull(query);
Assert.False(query.InternalQuery.Streaming);
}
}
public class SqlQuery_NonGeneric
{
[Fact]
public void With_empty_SQL_string_throws()
{
var set = new InternalDbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery("")).Message);
}
[Fact]
public void With_whitespace_SQL_string_throws()
{
var set = new InternalDbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery(" ")).Message);
}
[Fact]
public void With_null_SQL_string_throws()
{
var set = new InternalDbSet(new Mock>().Object);
Assert.Equal(Strings.ArgumentIsNullOrWhitespace("sql"), Assert.Throws(() => set.SqlQuery(null)).Message);
}
[Fact]
public void With_null_parameters_throws()
{
var set = new InternalDbSet(new Mock>().Object);
Assert.Equal("parameters", Assert.Throws(() => set.SqlQuery("query", null)).ParamName);
}
[Fact]
public void With_valid_arguments_doesnt_throw()
{
var set = new InternalDbSet(new Mock>().Object);
var query = set.SqlQuery("query");
Assert.NotNull(query);
Assert.False(query.InternalQuery.Streaming);
}
}
}
}