Skip to content

Commit 30ec8c6

Browse files
committed
Add chapter 5
1 parent 435858b commit 30ec8c6

15 files changed

+844
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###############################################################################
2+
# Set default behavior to automatically normalize line endings.
3+
###############################################################################
4+
* text=auto
5+
6+
###############################################################################
7+
# Set default behavior for command prompt diff.
8+
#
9+
# This is need for earlier builds of msysgit that does not have it on by
10+
# default for csharp files.
11+
# Note: This is only used by command line
12+
###############################################################################
13+
#*.cs diff=csharp
14+
15+
###############################################################################
16+
# Set the merge driver for project and solution files
17+
#
18+
# Merging from the command prompt will add diff markers to the files if there
19+
# are conflicts (Merging from VS is not affected by the settings below, in VS
20+
# the diff markers are never inserted). Diff markers may cause the following
21+
# file extensions to fail to load in VS. An alternative would be to treat
22+
# these files as binary and thus will always conflict and require user
23+
# intervention with every merge. To do so, just uncomment the entries below
24+
###############################################################################
25+
#*.sln merge=binary
26+
#*.csproj merge=binary
27+
#*.vbproj merge=binary
28+
#*.vcxproj merge=binary
29+
#*.vcproj merge=binary
30+
#*.dbproj merge=binary
31+
#*.fsproj merge=binary
32+
#*.lsproj merge=binary
33+
#*.wixproj merge=binary
34+
#*.modelproj merge=binary
35+
#*.sqlproj merge=binary
36+
#*.wwaproj merge=binary
37+
38+
###############################################################################
39+
# behavior for image files
40+
#
41+
# image files are treated as binary by default.
42+
###############################################################################
43+
#*.jpg binary
44+
#*.png binary
45+
#*.gif binary
46+
47+
###############################################################################
48+
# diff behavior for common document formats
49+
#
50+
# Convert binary document formats to text before diffing them. This feature
51+
# is only available from the command line. Turn it on by uncommenting the
52+
# entries below.
53+
###############################################################################
54+
#*.doc diff=astextplain
55+
#*.DOC diff=astextplain
56+
#*.docx diff=astextplain
57+
#*.DOCX diff=astextplain
58+
#*.dot diff=astextplain
59+
#*.DOT diff=astextplain
60+
#*.pdf diff=astextplain
61+
#*.PDF diff=astextplain
62+
#*.rtf diff=astextplain
63+
#*.RTF diff=astextplain
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.sln.docstates
8+
9+
# Build results
10+
[Dd]ebug/
11+
[Dd]ebugPublic/
12+
[Rr]elease/
13+
x64/
14+
build/
15+
bld/
16+
[Bb]in/
17+
[Oo]bj/
18+
19+
# Roslyn cache directories
20+
*.ide/
21+
22+
# MSTest test Results
23+
[Tt]est[Rr]esult*/
24+
[Bb]uild[Ll]og.*
25+
26+
#NUNIT
27+
*.VisualState.xml
28+
TestResult.xml
29+
30+
# Build Results of an ATL Project
31+
[Dd]ebugPS/
32+
[Rr]eleasePS/
33+
dlldata.c
34+
35+
*_i.c
36+
*_p.c
37+
*_i.h
38+
*.ilk
39+
*.meta
40+
*.obj
41+
*.pch
42+
*.pdb
43+
*.pgc
44+
*.pgd
45+
*.rsp
46+
*.sbr
47+
*.tlb
48+
*.tli
49+
*.tlh
50+
*.tmp
51+
*.tmp_proj
52+
*.log
53+
*.vspscc
54+
*.vssscc
55+
.builds
56+
*.pidb
57+
*.svclog
58+
*.scc
59+
60+
# Chutzpah Test files
61+
_Chutzpah*
62+
63+
# Visual C++ cache files
64+
ipch/
65+
*.aps
66+
*.ncb
67+
*.opensdf
68+
*.sdf
69+
*.cachefile
70+
71+
# Visual Studio profiler
72+
*.psess
73+
*.vsp
74+
*.vspx
75+
76+
# TFS 2012 Local Workspace
77+
$tf/
78+
79+
# Guidance Automation Toolkit
80+
*.gpState
81+
82+
# ReSharper is a .NET coding add-in
83+
_ReSharper*/
84+
*.[Rr]e[Ss]harper
85+
*.DotSettings.user
86+
87+
# JustCode is a .NET coding addin-in
88+
.JustCode
89+
90+
# TeamCity is a build add-in
91+
_TeamCity*
92+
93+
# DotCover is a Code Coverage Tool
94+
*.dotCover
95+
96+
# NCrunch
97+
_NCrunch_*
98+
.*crunch*.local.xml
99+
100+
# MightyMoose
101+
*.mm.*
102+
AutoTest.Net/
103+
104+
# Web workbench (sass)
105+
.sass-cache/
106+
107+
# Installshield output folder
108+
[Ee]xpress/
109+
110+
# DocProject is a documentation generator add-in
111+
DocProject/buildhelp/
112+
DocProject/Help/*.HxT
113+
DocProject/Help/*.HxC
114+
DocProject/Help/*.hhc
115+
DocProject/Help/*.hhk
116+
DocProject/Help/*.hhp
117+
DocProject/Help/Html2
118+
DocProject/Help/html
119+
120+
# Click-Once directory
121+
publish/
122+
123+
# Publish Web Output
124+
*.[Pp]ublish.xml
125+
*.azurePubxml
126+
## TODO: Comment the next line if you want to checkin your
127+
## web deploy settings but do note that will include unencrypted
128+
## passwords
129+
#*.pubxml
130+
131+
# NuGet Packages Directory
132+
packages/*
133+
## TODO: If the tool you use requires repositories.config
134+
## uncomment the next line
135+
#!packages/repositories.config
136+
137+
# Enable "build/" folder in the NuGet Packages folder since
138+
# NuGet packages use it for MSBuild targets.
139+
# This line needs to be after the ignore of the build folder
140+
# (and the packages folder if the line above has been uncommented)
141+
!packages/build/
142+
143+
# Windows Azure Build Output
144+
csx/
145+
*.build.csdef
146+
147+
# Windows Store app package directory
148+
AppPackages/
149+
150+
# Others
151+
sql/
152+
*.Cache
153+
ClientBin/
154+
[Ss]tyle[Cc]op.*
155+
~$*
156+
*~
157+
*.dbmdl
158+
*.dbproj.schemaview
159+
*.pfx
160+
*.publishsettings
161+
node_modules/
162+
163+
# RIA/Silverlight projects
164+
Generated_Code/
165+
166+
# Backup & report files from converting an old project file
167+
# to a newer Visual Studio version. Backup files are not needed,
168+
# because we have git ;-)
169+
_UpgradeReport_Files/
170+
Backup*/
171+
UpgradeLog*.XML
172+
UpgradeLog*.htm
173+
174+
# SQL Server files
175+
*.mdf
176+
*.ldf
177+
178+
# Business Intelligence projects
179+
*.rdl.data
180+
*.bim.layout
181+
*.bim_*.settings
182+
183+
# Microsoft Fakes
184+
FakesAssemblies/
185+
186+
# LightSwitch generated files
187+
GeneratedArtifacts/
188+
_Pvt_Extensions/
189+
ModelManifest.xml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
6+
<ProjectGuid>{98D6F82A-5BB0-4E78-A557-9DA24212A44D}</ProjectGuid>
7+
<OutputType>Library</OutputType>
8+
<RootNamespace>NancyApplication1.Tests</RootNamespace>
9+
<AssemblyName>NancyApplication1.Tests</AssemblyName>
10+
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
11+
</PropertyGroup>
12+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
13+
<DebugSymbols>true</DebugSymbols>
14+
<DebugType>full</DebugType>
15+
<Optimize>false</Optimize>
16+
<OutputPath>bin\Debug</OutputPath>
17+
<DefineConstants>DEBUG;</DefineConstants>
18+
<ErrorReport>prompt</ErrorReport>
19+
<WarningLevel>4</WarningLevel>
20+
<ConsolePause>false</ConsolePause>
21+
</PropertyGroup>
22+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
23+
<DebugType>full</DebugType>
24+
<Optimize>true</Optimize>
25+
<OutputPath>bin\Release</OutputPath>
26+
<ErrorReport>prompt</ErrorReport>
27+
<WarningLevel>4</WarningLevel>
28+
<ConsolePause>false</ConsolePause>
29+
</PropertyGroup>
30+
<ItemGroup>
31+
<Reference Include="System" />
32+
<Reference Include="nunit.framework">
33+
<HintPath>..\packages\NUnit.2.6.3\lib\nunit.framework.dll</HintPath>
34+
</Reference>
35+
<Reference Include="Nancy">
36+
<HintPath>..\packages\Nancy.1.3.0\lib\net40\Nancy.dll</HintPath>
37+
</Reference>
38+
<Reference Include="CsQuery">
39+
<HintPath>..\packages\CsQuery.1.3.3\lib\net40\CsQuery.dll</HintPath>
40+
</Reference>
41+
<Reference Include="Nancy.Testing">
42+
<HintPath>..\packages\Nancy.Testing.1.3.0\lib\net40\Nancy.Testing.dll</HintPath>
43+
</Reference>
44+
</ItemGroup>
45+
<ItemGroup>
46+
<Compile Include="Test.cs" />
47+
</ItemGroup>
48+
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
49+
<ItemGroup>
50+
<None Include="packages.config" />
51+
</ItemGroup>
52+
<ItemGroup>
53+
<ProjectReference Include="..\NancyApplication1\NancyApplication1.csproj">
54+
<Project>{887A8565-4A10-44C8-82EF-F2F2D1D2BFBF}</Project>
55+
<Name>NancyApplication1</Name>
56+
</ProjectReference>
57+
</ItemGroup>
58+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using NUnit.Framework;
2+
using Nancy;
3+
using Nancy.Testing;
4+
using Nancy.Bootstrapper;
5+
using System.Collections.Generic;
6+
using Nancy.Session;
7+
8+
using NancyApplication1;
9+
10+
namespace NancyApplication1.Tests
11+
{
12+
13+
public static class BootstrapperExtensions
14+
{
15+
public static void WithSession(this IPipelines pipeline,
16+
IDictionary<string, object> session)
17+
{
18+
pipeline.BeforeRequest.AddItemToEndOfPipeline(ctx =>
19+
{
20+
ctx.Request.Session = new Session(session);
21+
return null;
22+
});
23+
}
24+
}
25+
26+
[TestFixture ()]
27+
public class Test
28+
{
29+
private ConfigurableBootstrapper bootstrapper;
30+
private Browser browser;
31+
32+
[SetUp]
33+
public void Setup(){
34+
this.bootstrapper = new ConfigurableBootstrapper(with => {
35+
with.Module<Handler>();
36+
});
37+
this.browser = new Browser (bootstrapper);
38+
}
39+
40+
[Test ()]
41+
public void FetchesUserDetails ()
42+
{
43+
var result = this.browser.Get ("/mojombo",
44+
with => with.HttpRequest ());
45+
Assert.AreEqual (HttpStatusCode.OK, result.StatusCode);
46+
Assert.IsTrue (result.Body.AsString()
47+
.Contains("Tom Preston-Werner"));
48+
}
49+
50+
[Test]
51+
public void HandlesAuthorization()
52+
{
53+
// Mismatched CSRF token
54+
bootstrapper.WithSession(new Dictionary<string, object> {
55+
{ "CSRF:State", "sometoken" },
56+
});
57+
var result = this.browser.Get ("/authorize", (with) => {
58+
with.HttpRequest();
59+
with.Query("state", "someothertoken");
60+
});
61+
Assert.AreEqual (HttpStatusCode.Unauthorized, result.StatusCode);
62+
63+
// Matching CSRF token
64+
bootstrapper.WithSession(new Dictionary<string, object> {
65+
{ "CSRF:State", "sometoken" },
66+
{ "OrigUrl", "http://success" },
67+
});
68+
result = this.browser.Get ("/authorize", (with) => {
69+
with.HttpRequest();
70+
with.Query("state", "sometoken");
71+
});
72+
result.ShouldHaveRedirectedTo ("/authorize/success");
73+
}
74+
}
75+
}
76+

0 commit comments

Comments
 (0)