diff --git a/src/Orchard.Specs/Blogs.feature b/src/Orchard.Specs/Blogs.feature index 237384d14..307db8d95 100644 --- a/src/Orchard.Specs/Blogs.feature +++ b/src/Orchard.Specs/Blogs.feature @@ -155,7 +155,9 @@ Scenario: I set my blog to be the content for the home page and the posts for th And I go to "/" Then I should see "

My Blog

" When I go to "/my-blog" - Then the status should be 404 "Not Found" + Then the status should be 200 "OK" + When I go to "/" + Then the status should be 200 "OK" When I go to "/my-post" Then I should see "

My Post

" diff --git a/src/Orchard.Specs/Blogs.feature.cs b/src/Orchard.Specs/Blogs.feature.cs index 74fabba3f..a5c63de77 100644 --- a/src/Orchard.Specs/Blogs.feature.cs +++ b/src/Orchard.Specs/Blogs.feature.cs @@ -484,10 +484,14 @@ this.ScenarioSetup(scenarioInfo); #line 157 testRunner.When("I go to \"/my-blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line 158 - testRunner.Then("the status should be 404 \"Not Found\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.Then("the status should be 200 \"OK\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line 159 - testRunner.When("I go to \"/my-post\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); + testRunner.When("I go to \"/\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line 160 + testRunner.Then("the status should be 200 \"OK\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line 161 + testRunner.When("I go to \"/my-post\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); +#line 162 testRunner.Then("I should see \"

My Post

\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line hidden this.ScenarioCleanup(); @@ -498,11 +502,11 @@ this.ScenarioSetup(scenarioInfo); public virtual void ICanCreateBrowseBlogPostsOnSeveralPages() { TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can create browse blog posts on several pages", ((string[])(null))); -#line 162 -this.ScenarioSetup(scenarioInfo); -#line 163 - testRunner.Given("I have installed Orchard", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 164 +this.ScenarioSetup(scenarioInfo); +#line 165 + testRunner.Given("I have installed Orchard", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line 166 testRunner.When("I go to \"admin/blogs/create\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden TechTalk.SpecFlow.Table table14 = new TechTalk.SpecFlow.Table(new string[] { @@ -511,15 +515,15 @@ this.ScenarioSetup(scenarioInfo); table14.AddRow(new string[] { "Title.Title", "My Blog"}); -#line 165 +#line 167 testRunner.And("I fill in", ((string)(null)), table14, "And "); -#line 168 - testRunner.And("I hit \"Save\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 169 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 170 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Save\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 171 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 172 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 173 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table15 = new TechTalk.SpecFlow.Table(new string[] { @@ -528,17 +532,17 @@ this.ScenarioSetup(scenarioInfo); table15.AddRow(new string[] { "Title.Title", "My Post 1"}); -#line 172 +#line 174 testRunner.And("I fill in", ((string)(null)), table15, "And "); -#line 175 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 176 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 177 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 178 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 179 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 180 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 181 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table16 = new TechTalk.SpecFlow.Table(new string[] { @@ -547,17 +551,17 @@ this.ScenarioSetup(scenarioInfo); table16.AddRow(new string[] { "Title.Title", "My Post 2"}); -#line 180 +#line 182 testRunner.And("I fill in", ((string)(null)), table16, "And "); -#line 183 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 184 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 185 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 186 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 187 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 188 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 189 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table17 = new TechTalk.SpecFlow.Table(new string[] { @@ -566,17 +570,17 @@ this.ScenarioSetup(scenarioInfo); table17.AddRow(new string[] { "Title.Title", "My Post 3"}); -#line 188 +#line 190 testRunner.And("I fill in", ((string)(null)), table17, "And "); -#line 191 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 192 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 193 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 194 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 195 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 196 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 197 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table18 = new TechTalk.SpecFlow.Table(new string[] { @@ -585,17 +589,17 @@ this.ScenarioSetup(scenarioInfo); table18.AddRow(new string[] { "Title.Title", "My Post 4"}); -#line 196 +#line 198 testRunner.And("I fill in", ((string)(null)), table18, "And "); -#line 199 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 200 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 201 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 202 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 203 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 204 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 205 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table19 = new TechTalk.SpecFlow.Table(new string[] { @@ -604,17 +608,17 @@ this.ScenarioSetup(scenarioInfo); table19.AddRow(new string[] { "Title.Title", "My Post 5"}); -#line 204 +#line 206 testRunner.And("I fill in", ((string)(null)), table19, "And "); -#line 207 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 208 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 209 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 210 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 211 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 212 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 213 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table20 = new TechTalk.SpecFlow.Table(new string[] { @@ -623,17 +627,17 @@ this.ScenarioSetup(scenarioInfo); table20.AddRow(new string[] { "Title.Title", "My Post 6"}); -#line 212 +#line 214 testRunner.And("I fill in", ((string)(null)), table20, "And "); -#line 215 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 216 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 217 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 218 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 219 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 220 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 221 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table21 = new TechTalk.SpecFlow.Table(new string[] { @@ -642,17 +646,17 @@ this.ScenarioSetup(scenarioInfo); table21.AddRow(new string[] { "Title.Title", "My Post 7"}); -#line 220 +#line 222 testRunner.And("I fill in", ((string)(null)), table21, "And "); -#line 223 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 224 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 225 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 226 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 227 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 228 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 229 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table22 = new TechTalk.SpecFlow.Table(new string[] { @@ -661,17 +665,17 @@ this.ScenarioSetup(scenarioInfo); table22.AddRow(new string[] { "Title.Title", "My Post 8"}); -#line 228 +#line 230 testRunner.And("I fill in", ((string)(null)), table22, "And "); -#line 231 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 232 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 233 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 234 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 235 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 236 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 237 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table23 = new TechTalk.SpecFlow.Table(new string[] { @@ -680,17 +684,17 @@ this.ScenarioSetup(scenarioInfo); table23.AddRow(new string[] { "Title.Title", "My Post 9"}); -#line 236 +#line 238 testRunner.And("I fill in", ((string)(null)), table23, "And "); -#line 239 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 240 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 241 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 242 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 243 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 244 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 245 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table24 = new TechTalk.SpecFlow.Table(new string[] { @@ -699,17 +703,17 @@ this.ScenarioSetup(scenarioInfo); table24.AddRow(new string[] { "Title.Title", "My Post 10"}); -#line 244 +#line 246 testRunner.And("I fill in", ((string)(null)), table24, "And "); -#line 247 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 248 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 249 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 250 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 251 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 252 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 253 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table25 = new TechTalk.SpecFlow.Table(new string[] { @@ -718,17 +722,17 @@ this.ScenarioSetup(scenarioInfo); table25.AddRow(new string[] { "Title.Title", "My Post 11"}); -#line 252 +#line 254 testRunner.And("I fill in", ((string)(null)), table25, "And "); -#line 255 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 256 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 257 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 258 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 259 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 260 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 261 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table26 = new TechTalk.SpecFlow.Table(new string[] { @@ -737,33 +741,33 @@ this.ScenarioSetup(scenarioInfo); table26.AddRow(new string[] { "Title.Title", "My Post 12"}); -#line 260 +#line 262 testRunner.And("I fill in", ((string)(null)), table26, "And "); -#line 263 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 264 - testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 265 - testRunner.Then("I should see \"Your Blog Post has been created.\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 266 - testRunner.When("I go to \"my-blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); + testRunner.And("I am redirected", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 267 - testRunner.Then("I should see \"]*>.*?My Blog.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.Then("I should see \"Your Blog Post has been created.\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line 268 - testRunner.And("I should see \"]*>.*?My Post 12.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.When("I go to \"my-blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line 269 - testRunner.And("I should see \"]*>.*?My Post 11.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 270 - testRunner.And("I should not see \"]*>.*?My Post 10.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 271 - testRunner.When("I go to \"my-blog?page=2\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); -#line 272 testRunner.Then("I should see \"]*>.*?My Blog.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line 270 + testRunner.And("I should see \"]*>.*?My Post 12.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 271 + testRunner.And("I should see \"]*>.*?My Post 11.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 272 + testRunner.And("I should not see \"]*>.*?My Post 10.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 273 - testRunner.And("I should see \"]*>.*?My Post 1.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.When("I go to \"my-blog?page=2\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line 274 - testRunner.And("I should see \"]*>.*?My Post 2.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.Then("I should see \"]*>.*?My Blog.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line 275 + testRunner.And("I should see \"]*>.*?My Post 1.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 276 + testRunner.And("I should see \"]*>.*?My Post 2.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 277 testRunner.And("I should not see \"]*>.*?My Post 3.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden this.ScenarioCleanup(); @@ -776,11 +780,11 @@ this.ScenarioSetup(scenarioInfo); { TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can create a new blog with a percent sign in the title and it gets stripped out" + " of the slug", ((string[])(null))); -#line 277 -this.ScenarioSetup(scenarioInfo); -#line 278 - testRunner.Given("I have installed Orchard", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 279 +this.ScenarioSetup(scenarioInfo); +#line 280 + testRunner.Given("I have installed Orchard", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); +#line 281 testRunner.When("I go to \"admin/blogs/create\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden TechTalk.SpecFlow.Table table27 = new TechTalk.SpecFlow.Table(new string[] { @@ -789,15 +793,15 @@ this.ScenarioSetup(scenarioInfo); table27.AddRow(new string[] { "Title.Title", "My Blog"}); -#line 280 +#line 282 testRunner.And("I fill in", ((string)(null)), table27, "And "); -#line 283 - testRunner.And("I hit \"Save\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 284 - testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 285 - testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); + testRunner.And("I hit \"Save\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 286 + testRunner.And("I go to \"admin/blogs\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 287 + testRunner.And("I follow \"My Blog\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 288 testRunner.And("I follow \"New Post\" where class name has \"primaryAction\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden TechTalk.SpecFlow.Table table28 = new TechTalk.SpecFlow.Table(new string[] { @@ -809,15 +813,15 @@ this.ScenarioSetup(scenarioInfo); table28.AddRow(new string[] { "Body.Text", "Hi there."}); -#line 287 +#line 289 testRunner.And("I fill in", ((string)(null)), table28, "And "); -#line 291 - testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); -#line 292 - testRunner.And("I go to \"my-blog/my-post-with-a-sign\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 293 - testRunner.Then("I should see \"]*>.*?My Post with a % Sign.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.And("I hit \"Publish Now\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line 294 + testRunner.And("I go to \"my-blog/my-post-with-a-sign\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); +#line 295 + testRunner.Then("I should see \"]*>.*?My Post with a % Sign.*?\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); +#line 296 testRunner.And("I should see \"Hi there.\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); #line hidden this.ScenarioCleanup(); diff --git a/src/Orchard.Specs/Pages.feature b/src/Orchard.Specs/Pages.feature index 382d20e2d..a299c4a61 100644 --- a/src/Orchard.Specs/Pages.feature +++ b/src/Orchard.Specs/Pages.feature @@ -25,13 +25,13 @@ Scenario: In the admin (menu) there is a link to create a Page And I fill in | name | value | | Title.Title | Super Duper | - | AutoroutePart.LayoutEditor.Data | { "type": "Content", "data": "TypeName=Orchard.Layouts.Elements.Text&Content=This+is+super+number+two", "isTemplated": false, "contentType": "Orchard.Layouts.Elements.Text", "contentTypeLabel": "Text", "contentTypeClass": "text", "html": "This is super number two", "hasEditor": true } | + | LayoutPart.LayoutEditor.Data | { "type": "Content", "data": "TypeName=Orchard.Layouts.Elements.Text&Content=This+is+super+number+two", "isTemplated": false, "contentType": "Orchard.Layouts.Elements.Text", "contentTypeLabel": "Text", "contentTypeClass": "text", "html": "This is super number two", "hasEditor": true } | And I hit "Publish Now" And I go to "super-duper-2" Then I should see "]*>.*?Super Duper.*?" And I should see "This is super number two." - # A new page marked to be the home page and publish does take over the home page and is not accessible from its own standard path + # A new page marked to be the home page and publish does take over the home page and is also accessible from its own standard path When I go to "Admin/Contents/Create/Page" And I fill in | name | value | @@ -41,7 +41,7 @@ Scenario: In the admin (menu) there is a link to create a Page And I go to "/" Then I should see "

Another

" When I go to "another" - Then the status should be 404 "Not Found" + Then the status should be 200 "OK" # A new page marked to be the home page but only saved as draft does not take over the home page When I go to "Admin/Contents/Create/Page" diff --git a/src/Orchard.Specs/Pages.feature.cs b/src/Orchard.Specs/Pages.feature.cs index 5a60be007..f75cbe52f 100644 --- a/src/Orchard.Specs/Pages.feature.cs +++ b/src/Orchard.Specs/Pages.feature.cs @@ -110,7 +110,7 @@ this.ScenarioSetup(scenarioInfo); "Title.Title", "Super Duper"}); table2.AddRow(new string[] { - "AutoroutePart.LayoutEditor.Data", + "LayoutPart.LayoutEditor.Data", @"{ ""type"": ""Content"", ""data"": ""TypeName=Orchard.Layouts.Elements.Text&Content=This+is+super+number+two"", ""isTemplated"": false, ""contentType"": ""Orchard.Layouts.Elements.Text"", ""contentTypeLabel"": ""Text"", ""contentTypeClass"": ""text"", ""html"": ""This is super number two"", ""hasEditor"": true }"}); #line 25 testRunner.And("I fill in", ((string)(null)), table2, "And "); @@ -145,7 +145,7 @@ this.ScenarioSetup(scenarioInfo); #line 43 testRunner.When("I go to \"another\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line 44 - testRunner.Then("the status should be 404 \"Not Found\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); + testRunner.Then("the status should be 200 \"OK\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); #line 47 testRunner.When("I go to \"Admin/Contents/Create/Page\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When "); #line hidden diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Map/AliasMap.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Map/AliasMap.cs index 3211768b0..7a2be0e51 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Map/AliasMap.cs +++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Map/AliasMap.cs @@ -171,7 +171,8 @@ namespace Orchard.Alias.Implementation.Map { } if (match == null) { - var foundPath = focus.Paths.Keys.FirstOrDefault(); + // Get the shortest path available to ensure the "home" alias is always taken if present. + var foundPath = focus.Paths.Keys.OrderBy(x => x.Length).FirstOrDefault(); if (foundPath != null) { // Here the deepest match is being created, which will be populated as it rises back up the stack, but save the path here. // Within this function it's used to count how many items match so we get the best one; but when it's returned @@ -193,4 +194,4 @@ namespace Orchard.Alias.Implementation.Map { } } -} \ No newline at end of file +} diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs index 6d19bba34..a60447e97 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs @@ -115,7 +115,7 @@ namespace Orchard.Autoroute.Drivers { }; // Retrieve home page. - var homePageId = _homeAliasService.GetHomePageId(); + var homePageId = _homeAliasService.GetHomePageId(VersionOptions.Latest); var isHomePage = part.Id == homePageId; viewModel.IsHomePage = isHomePage; diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Handlers/AutoroutePartHandler.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Handlers/AutoroutePartHandler.cs index fd4ec72c9..da1e7c164 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Handlers/AutoroutePartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Handlers/AutoroutePartHandler.cs @@ -39,7 +39,7 @@ namespace Orchard.Autoroute.Handlers { OnPublished((ctx, part) => PublishAlias(part)); // Remove alias if removed or unpublished - OnRemoved((ctx, part) => RemoveAlias(part)); + OnRemoving((ctx, part) => RemoveAlias(part)); OnUnpublished((ctx, part) => RemoveAlias(part)); // Register alias as identity @@ -73,7 +73,7 @@ namespace Orchard.Autoroute.Handlers { // Update the home alias to point to this item being published. _homeAliasService.PublishHomeAlias(part); } - + _autorouteService.Value.PublishAlias(part); } @@ -99,7 +99,7 @@ namespace Orchard.Autoroute.Handlers { } void RemoveAlias(AutoroutePart part) { - var homePageId = _homeAliasService.GetHomePageId(); + var homePageId = _homeAliasService.GetHomePageId(VersionOptions.Latest); // Is this the current home page? if (part.ContentItem.Id == homePageId) { diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs index 5eb4b841a..de6c5c033 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs @@ -10,10 +10,12 @@ using Orchard.Core.Common.Models; namespace Orchard.Autoroute.Providers { public class SlugTokens : ITokenProvider { private readonly ISlugService _slugService; + private readonly IHomeAliasService _homeAliasService; - public SlugTokens(ISlugService slugService) { + public SlugTokens(ISlugService slugService, IHomeAliasService homeAliasService) { T = NullLocalizer.Instance; _slugService = slugService; + _homeAliasService = homeAliasService; } public Localizer T { get; set; } @@ -40,11 +42,12 @@ namespace Orchard.Autoroute.Providers { // {Content.Slug} .Token("Slug", (content => content == null ? String.Empty : _slugService.Slugify(content))) .Token("Path", (content => { - var autoroute = content.As(); - if (autoroute == null) { + var autoroutePart = content.As(); + if (autoroutePart == null) { return String.Empty; } - return autoroute.DisplayAlias; + var isHomePage = _homeAliasService.IsHomePage(autoroutePart); + return isHomePage ? String.Empty : autoroutePart.DisplayAlias; })) // {Content.ParentPath} .Token("ParentPath", (content => { @@ -52,13 +55,15 @@ namespace Orchard.Autoroute.Providers { if (common == null || common.Container == null) { return String.Empty; } - var ar = common.Container.As(); - if (ar == null) { + var containerAutoroutePart = common.Container.As(); + if (containerAutoroutePart == null) { return String.Empty; } - if (String.IsNullOrEmpty(ar.DisplayAlias)) + if (String.IsNullOrEmpty(containerAutoroutePart.DisplayAlias)) return String.Empty; - return ar.DisplayAlias + "/"; + + var isHomePage = _homeAliasService.IsHomePage(containerAutoroutePart); + return isHomePage ? "/" : containerAutoroutePart.DisplayAlias + "/"; })); context.For("TypeDefinition") diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs index 8231aa167..1e4f0606d 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs @@ -13,7 +13,6 @@ using Orchard.Localization.Services; using Orchard.Mvc; using System.Web; using Orchard.ContentManagement.Aspects; -using Orchard.Alias.Implementation.Storage; namespace Orchard.Autoroute.Services { public class AutorouteService : Component, IAutorouteService { @@ -24,7 +23,6 @@ namespace Orchard.Autoroute.Services { private readonly IContentManager _contentManager; private readonly IRouteEvents _routeEvents; private readonly ICultureManager _cultureManager; - private readonly IAliasStorage _aliasStorage; private readonly IHttpContextAccessor _httpContextAccessor; private const string AliasSource = "Autoroute:View"; @@ -35,15 +33,13 @@ namespace Orchard.Autoroute.Services { IContentManager contentManager, IRouteEvents routeEvents, ICultureManager cultureManager, - IHttpContextAccessor httpContextAccessor, - IAliasStorage aliasStorage) { + IHttpContextAccessor httpContextAccessor) { _aliasService = aliasService; _tokenizer = tokenizer; _contentDefinitionManager = contentDefinitionManager; _contentManager = contentManager; _routeEvents = routeEvents; - _aliasStorage = aliasStorage; _cultureManager = cultureManager; _httpContextAccessor = httpContextAccessor; } @@ -69,13 +65,14 @@ namespace Orchard.Autoroute.Services { if (settings.UseCulturePattern) { // TODO: Refactor the below so that we don't need to know about Request.Form["Localization.SelectedCulture"]. // If we are creating from a form post we use the form value for culture. - HttpContextBase context = _httpContextAccessor.Current(); - if (!String.IsNullOrEmpty(context.Request.Form["Localization.SelectedCulture"])) { - itemCulture = context.Request.Form["Localization.SelectedCulture"].ToString(); + var context = _httpContextAccessor.Current(); + var selectedCulture = context.Request.Form["Localization.SelectedCulture"]; + if (!String.IsNullOrEmpty(selectedCulture)) { + itemCulture = selectedCulture; } } - string pattern = GetDefaultPattern(part.ContentItem.ContentType, itemCulture).Pattern; + var pattern = GetDefaultPattern(part.ContentItem.ContentType, itemCulture).Pattern; // String.Empty forces pattern based generation. if (part.UseCustomPattern && (!String.IsNullOrWhiteSpace(part.CustomPattern))) { diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs index 50c6ebde0..f11ba7dd3 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/HomeAliasService.cs @@ -1,17 +1,22 @@ using System; +using System.Linq; using System.Web.Routing; using Orchard.Alias; +using Orchard.Alias.Implementation.Holder; +using Orchard.Autoroute.Models; using Orchard.ContentManagement; namespace Orchard.Autoroute.Services { public class HomeAliasService : IHomeAliasService { private readonly IAliasService _aliasService; private readonly IContentManager _contentManager; + private readonly IAliasHolder _aliasHolder; private const string AliasSource = "Autoroute:Home"; private const string HomeAlias = ""; - public HomeAliasService(IAliasService aliasService, IContentManager contentManager) { + public HomeAliasService(IAliasService aliasService, IAliasHolder aliasHolder, IContentManager contentManager) { _aliasService = aliasService; + _aliasHolder = aliasHolder; _contentManager = contentManager; } @@ -19,21 +24,27 @@ namespace Orchard.Autoroute.Services { return _aliasService.Get(HomeAlias); } - public int? GetHomePageId() { - var homePageRoute = GetHomeRoute(); - var homePageIdValue = homePageRoute != null && homePageRoute.ContainsKey("id") ? (string)homePageRoute["id"] : default(string); - var homePageId = TryParseInt32(homePageIdValue); - - return homePageId; + public int? GetHomePageId(VersionOptions version = null) { + var homePage = GetHomePage(version); + return homePage != null ? homePage.Id : default(int?); } public IContent GetHomePage(VersionOptions version = null) { - var homePageId = GetHomePageId(); - var homePage = homePageId != null ? _contentManager.Get(homePageId.Value, version ?? VersionOptions.Published) : default(IContent); + var homePageRoute = GetHomeRoute(); + var alias = LookupAlias(homePageRoute); + if (alias == null) + return null; + + var homePage = _contentManager.Query(version).Where(x => x.DisplayAlias == alias).Slice(0, 1).SingleOrDefault(); return homePage; } + public bool IsHomePage(IContent content, VersionOptions homePageVersion = null) { + var homePageId = GetHomePageId(homePageVersion); + return content.Id == homePageId; + } + public void PublishHomeAlias(IContent content) { var routeValues = _contentManager.GetItemMetadata(content).DisplayRouteValues; PublishHomeAlias(routeValues); @@ -49,13 +60,18 @@ namespace Orchard.Autoroute.Services { _aliasService.Set(HomeAlias, route, AliasSource); } - private int? TryParseInt32(string value) { - int i; + private string LookupAlias(RouteValueDictionary routeValues) { + object area; - if (String.IsNullOrWhiteSpace(value) || !Int32.TryParse(value, out i)) + if (!routeValues.TryGetValue("area", out area)) return null; - - return i; + + var map = _aliasHolder.GetMap(area.ToString()); + if (map == null) + return null; + + var alias = map.GetAliases().FirstOrDefault(x => !String.IsNullOrWhiteSpace(x.Path)); + return alias != null ? alias.Path : null; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/IHomeAliasService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/IHomeAliasService.cs index d617b1dce..f85cd64fc 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/IHomeAliasService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/IHomeAliasService.cs @@ -5,8 +5,9 @@ namespace Orchard.Autoroute.Services { public interface IHomeAliasService : IDependency { RouteValueDictionary GetHomeRoute(); - int? GetHomePageId(); + int? GetHomePageId(VersionOptions version = null); IContent GetHomePage(VersionOptions version = null); + bool IsHomePage(IContent content, VersionOptions homePageVersion = null); void PublishHomeAlias(IContent content); void PublishHomeAlias(string route); void PublishHomeAlias(RouteValueDictionary route);