/// <summary>
/// test for both the success and failure paths of the attribute
/// </summary>
[TestClass]
public class Tests
{
[Isolated]
[TestMethod]
public void When_the_membership_provider_gives_access_the_data_is_returned()
{
// arrange
// create a fake objects
var fakeIMembershipProvider = Isolate.Fake.Instance<IMembershipProvider>();
var fakeISqlProvider = Isolate.Fake.Instance<ISqlProvider>();
// create real objects
var fakeData = new DataRecord();
var bl = new BusinessLogic(fakeISqlProvider);
// Set that when we call the factory method we get the fake membership system
Isolate.WhenCalled(() => MembershipProviderFactory.GetProvider()).WillReturn(fakeIMembershipProvider);
// Set when we call the DB layer we get the fake object
Isolate.WhenCalled(() => fakeISqlProvider.GetItemFromDB(0)).WillReturn(fakeData);
// Set that we are allowed to see the item
Isolate.WhenCalled(() => fakeIMembershipProvider.CanCurrentUserViewThisItem(0)).WillReturn(true);
// act
var actual = bl.GetItem(1);
// assert
Assert.AreEqual(fakeData, actual);
Isolate.Verify.WasCalledWithExactArguments(() => fakeISqlProvider.GetItemFromDB(1));
}
[Isolated]
[TestMethod]
public void When_the_membership_provider_does_not_give_access_the_data_is_returned()
{
// arrange
// create a fake objects
var fakeIMembershipProvider = Isolate.Fake.Instance<IMembershipProvider>();
var fakeISqlProvider = Isolate.Fake.Instance<ISqlProvider>();
// create real objects
var fakeData = new DataRecord();
var bl = new BusinessLogic(fakeISqlProvider);
// Set that when we call the factory method we get the fake membership system
Isolate.WhenCalled(() => MembershipProviderFactory.GetProvider()).WillReturn(fakeIMembershipProvider);
// Set when we call the DB layer we get the fake object
Isolate.WhenCalled(() => fakeISqlProvider.GetItemFromDB(0)).WillReturn(fakeData);
// Set that we are not allowed to see the item
Isolate.WhenCalled(() => fakeIMembershipProvider.CanCurrentUserViewThisItem(0)).WillReturn(false);
// act
var actual = bl.GetItem(1);
// assert
Assert.AreEqual(null, actual);
Isolate.Verify.WasNotCalled(() => fakeISqlProvider.GetItemFromDB(1));
}
}