Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- How to mock a certain code using Rhino.Mocks?
- public interface IFlowFolderHandler
- {
- OperationResult Post(FlowFolder dto);
- }
- public class FlowFolderHandler : IFlowFolderHandler
- {
- private readonly IResponse m_response;
- private readonly IEntityRepository m_entityRepository;
- public FlowFolderHandler(IResponse response, IEntityRepository entityRepository)
- {
- m_response = response;
- m_entityRepository = entityRepository;
- }
- public OperationResult Post(FlowFolder dto)
- {
- var ent = FlowFolderX.Cast(dto, true);
- m_entityRepository.Update(ent);
- var id = EntityIdComparer.IdToString(ent.Id);
- m_response.Headers["X-Entity-Id"] = id;
- return new OperationResult.Created
- {
- RedirectLocation = new Uri("FlowFolder/" + id, UriKind.Relative),
- ResponseResource = ent.GetEntityRelation(),
- };
- }
- }
- private class EntityRepositoryMock : IEntityRepository
- {
- private readonly Action<IEntityBase> m_update;
- public EntityRepositoryMock(int id, EntityRelation entityRelation)
- {
- m_update = ent => EntityRepository.ApplySaveSideEffects(ent, id, entityRelation);
- }
- public IEntityBase Fetch(EntityId entityId) { throw new NotImplementedException(); }
- public void FetchByExpression(Type entityType, Expression expr, IList list, List<Pair<string, bool>> orderBy) { throw new NotImplementedException(); }
- public void Update(IEntityBase entity) { m_update(entity); }
- }
- private class ResponseMock : IResponse
- {
- public ResponseMock() { Headers = new HttpHeaderDictionary(); }
- public IHttpEntity Entity { get { throw new NotImplementedException(); } }
- public HttpHeaderDictionary Headers { get; private set; }
- public void WriteHeaders() { throw new NotImplementedException(); }
- public bool HeadersSent { get { throw new NotImplementedException(); } }
- public int StatusCode
- {
- get { throw new NotImplementedException(); }
- set { throw new NotImplementedException(); }
- }
- }
- [Test]
- [Factory("YieldPostFlowFolderData")]
- public void PostFlowFolder(int id, Uri uri, EntityRelation entityRelation, FlowFolder flowFolder)
- {
- var entityRepository = new EntityRepositoryMock(id, entityRelation);
- var response = new ResponseMock();
- var handler = new FlowFolderHandler(response, entityRepository);
- var result = handler.Post(flowFolder);
- Assert.AreEqual((int)HttpStatusCode.Created, result.StatusCode);
- Assert.AreEqual(id, int.Parse(response.Headers["X-Entity-Id"]));
- Assert.AreEqual(uri, result.RedirectLocation);
- SUC.Utils.AssertDeepEqual(entityRelation, result.ResponseResource);
- }
- // Mocks
- var repositoryMock = MockRepository.GenerateMock<IEntityRepository>();
- var responseMock = MockRepository.GenerateMock<IResponse>();
- repositoryMock.Expect(m => m.Update(null)).IgnoreArguments.WhenCalled(
- mi =>
- {
- IEntityBase passedInEntity = mi.Args[0] as IEntityBase;
- EntityRepository.ApplySaveSideEffects(passedInEntity, id, entityRelation);
- }
- ).Repeat.Any();
- repositoryMock.Expect(m => m.Entity).Proeprtybehaviour();
- repositoryMock.AssertWasCalled(m => m.Update(), mi => mi.Repeat.Once());
Add Comment
Please, Sign In to add comment