public void DeployViewModel_Deploy_WhenDeployingResource_ResourceRepositoryDeployCalled()
{
//New Mocks
var mockedServerRepo = new Mock<IEnvironmentRepository>();
var server = new Mock<IEnvironmentModel>();
server.Setup(x => x.AuthorizationService).Returns(_authService.Object);
_authService.Setup(a => a.IsAuthorized(AuthorizationContext.DeployFrom, It.IsAny<string>())).Returns(true);
_authService.Setup(a => a.IsAuthorized(AuthorizationContext.DeployTo, It.IsAny<string>())).Returns(true);
var secondServer = new Mock<IEnvironmentModel>();
secondServer.Setup(x => x.AuthorizationService).Returns(_authService.Object);
var provider = new Mock<IEnvironmentModelProvider>();
var resourceNode = new Mock<IContextualResourceModel>();
var resRepo = new Mock<IResourceRepository>();
var resRepo2 = new Mock<IResourceRepository>();
var id = Guid.NewGuid();
const string expectedResourceName = "Test Resource";
resourceNode.Setup(res => res.ResourceName).Returns(expectedResourceName);
resourceNode.Setup(res => res.Environment.Connection.ServerEvents).Returns(new Mock<IEventPublisher>().Object);
resourceNode.Setup(res => res.ID).Returns(id);
//Setup Servers
resRepo.Setup(c => c.FindSingle(It.IsAny<Expression<Func<IResourceModel, bool>>>(), false, false)).Verifiable();
resRepo.Setup(c => c.FindSingle(It.IsAny<Expression<Func<IResourceModel, bool>>>(), false, false)).Returns(resourceNode.Object);
resRepo.Setup(c => c.DeployResources(It.IsAny<IEnvironmentModel>(), It.IsAny<IEnvironmentModel>(),
It.IsAny<IDeployDto>(), It.IsAny<IEventAggregator>())).Verifiable();
resRepo.Setup(c => c.All()).Returns(new List<IResourceModel>());
resRepo2.Setup(c => c.All()).Returns(new List<IResourceModel>());
server.Setup(svr => svr.IsConnected).Returns(true);
server.Setup(svr => svr.Connection).Returns(DebugOutputViewModelTest.CreateMockConnection(new Random()).Object);
server.Setup(svr => svr.ResourceRepository).Returns(resRepo.Object);
secondServer.Setup(svr => svr.IsConnected).Returns(true);
secondServer.Setup(svr => svr.Connection).Returns(DebugOutputViewModelTest.CreateMockConnection(new Random()).Object);
secondServer.Setup(svr => svr.ResourceRepository).Returns(resRepo2.Object);
mockedServerRepo.Setup(svr => svr.Fetch(It.IsAny<IEnvironmentModel>())).Returns(server.Object);
provider.Setup(prov => prov.Load()).Returns(new List<IEnvironmentModel> { server.Object, secondServer.Object });
var initialResource = new Mock<IContextualResourceModel>();
initialResource.Setup(res => res.Environment).Returns(server.Object);
initialResource.Setup(res => res.ResourceName).Returns(expectedResourceName);
//Setup Navigation Tree
var resourceTreeNode = new ExplorerItemModel(new Mock<IConnectControlSingleton>().Object, new Mock<IStudioResourceRepository>().Object);
//Setup Server Resources
var mockStudioResourceRepository = GetMockStudioResourceRepository();
mockStudioResourceRepository.Setup(repository => repository.FindItem(It.IsAny<Func<IExplorerItemModel, bool>>())).Returns(resourceTreeNode);
var sourceDeployNavigationViewModel = new DeployNavigationViewModel(new Mock<IEventAggregator>().Object, new TestAsyncWorker(), mockedServerRepo.Object, mockStudioResourceRepository.Object, true, new Mock<IConnectControlSingleton>().Object) { Environment = server.Object, ExplorerItemModels = new ObservableCollection<IExplorerItemModel>() };
var deployViewModel = new DeployViewModel(new TestAsyncWorker(), provider.Object, mockedServerRepo.Object, new Mock<IEventAggregator>().Object, mockStudioResourceRepository.Object, new Mock<IConnectControlViewModel>().Object, new Mock<IConnectControlViewModel>().Object, null, null, null, new Mock<IConnectControlSingleton>().Object)
{
Source = sourceDeployNavigationViewModel,
Target = sourceDeployNavigationViewModel,
SelectedSourceServer = server.Object
};
PrivateObject p = new PrivateObject(deployViewModel);
p.SetField("_getActive", new Func<IEnvironmentModel>(() => new Mock<IEnvironmentModel>().Object));
p.SetField("_setActive", new Action<IEnvironmentModel>(a => { }));
resourceTreeNode.IsChecked = true;
//------------Execute Test---------------------------
deployViewModel.DeployCommand.Execute(null);
resRepo.Verify(
sender =>
sender.DeployResources(It.IsAny<IEnvironmentModel>(), It.IsAny<IEnvironmentModel>(),
It.IsAny<IDeployDto>(), It.IsAny<IEventAggregator>()));
}