public void NamedActionsReturnsSingleAction()
 {
     var plugin = new ProjectStatusPlugin(null, null, null);
     var actions = plugin.NamedActions;
     Assert.AreEqual(1, actions.Length);
     Assert.IsInstanceOf<ImmutableNamedAction>(actions[0]);
     Assert.AreEqual("ViewProjectStatus", actions[0].ActionName);
     Assert.AreSame(plugin, actions[0].Action);
 }
        public void ExecuteGeneratesStatusForRoot()
        {
            var url = "/somewhere/action";
            var appPath = "/";
            var projectName = "The Project";
            var farmService = this.mocks.StrictMock<IFarmService>();
            var viewGenerator = this.mocks.StrictMock<IVelocityViewGenerator>();
            var cruiseRequest = this.mocks.StrictMock<ICruiseRequest>();
            var request = this.mocks.StrictMock<IRequest>();
            var projectSpec = this.mocks.StrictMock<IProjectSpecifier>();
            var urlBuilder = this.mocks.StrictMock<ICruiseUrlBuilder>();
            SetupResult.For(cruiseRequest.Request).Return(request);
            SetupResult.For(cruiseRequest.ProjectSpecifier).Return(projectSpec);
            SetupResult.For(cruiseRequest.RetrieveSessionToken()).Return(null);
            SetupResult.For(request.ApplicationPath).Return(appPath);
            SetupResult.For(projectSpec.ProjectName).Return(projectName);
            SetupResult.For(farmService.GetLinkedSiteId(projectSpec, null, "ohloh")).Return("1234567");
            SetupResult.For(urlBuilder.BuildProjectUrl(ProjectStatusAction.ActionName, projectSpec)).Return(url);
            Expect.Call(viewGenerator.GenerateView(null, null))
                .Callback<string, Hashtable>((n, ht) =>
                {
                    Assert.AreEqual("ProjectStatusReport.vm", n);
                    Assert.IsNotNull(ht);
                    Assert.IsTrue(ht.ContainsKey("dataUrl"));
                    Assert.AreEqual("/somewhere/action?view=json", ht["dataUrl"]);
                    Assert.IsTrue(ht.ContainsKey("projectName"));
                    Assert.AreEqual(projectName, ht["projectName"]);
                    Assert.IsTrue(ht.ContainsKey("applicationPath"));
                    Assert.AreEqual(string.Empty, ht["applicationPath"]);
                    return true;
                })
                .Return(new HtmlFragmentResponse("from nVelocity"));

            this.mocks.ReplayAll();
            var plugin = new ProjectStatusPlugin(farmService, viewGenerator, urlBuilder);
            var response = plugin.Execute(cruiseRequest);

            this.mocks.VerifyAll();
            Assert.IsInstanceOf<HtmlFragmentResponse>(response);
            var actual = response as HtmlFragmentResponse;
            Assert.AreEqual("from nVelocity", actual.ResponseFragment);
        }
 public void DescriptionIsCorrect()
 {
     var plugin = new ProjectStatusPlugin(null, null, null);
     Assert.AreEqual("Project Status", plugin.LinkDescription);
 }