Context Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext
ContextDLL Be.Corebvba.Aubergine.Examples.DLL
Story: Make sure my website gets enough visibility. As a website owner. I want to make sure that I get enough visibility. So that I can get enough traffic.
Scenario Search results for 'keywords' on searchengine should contain 'my url':
- Given the current url is 'search url'
- When searching for 'keywords'
- Then the result should contain 'my url'
Example
+--------------+--------------------------------+------------------+-----------------+
| searchengine | search url | keywords | my url |
+--------------+--------------------------------+------------------+-----------------+
| google | http://www.google.be/search?q= | BDD .Net | www.corebvba.be |
| bing | http://www.bing.com/search?q= | core bvba tom | www.corebvba.be |
| bing | http://www.bing.com/search?q= | Quantum physics | www.corebvba.be |
| faulty link | http://www.googleaaa | core bvba tom | www.corebvba.be |
+--------------+--------------------------------+------------------+-----------------+
Scenario Search results on google for keywords should contain 'www.corebvba.be'
Given the current url is 'http://www.google.be/search?q='
When searching for the following keywords
+-----------+
| keywords |
+-----------+
| Aubergine |
| BDD |
+-----------+
Then the result should contain 'www.corebvba.be' and the following markup elements
+------------------+
| type | inner |
+------------------+
| em | BDD |
| em | Aubergine |
+------------------+
And the context:
public class BrowserContext
{
public string Url { get; set; }
public string Result { get; set; }
private WebClient wc = new WebClient();
[DSL("the current url is '(?<url>.*)'")]
void SetUrl(string url)
{
Url = url;
}
[DSL("searching for '(?<keywords>.*)'")]
void SearchForKeyWords(string keywords)
{
Result = wc.DownloadString(Url + HttpUtility.UrlEncode(keywords));
}
[DSL("searching for the following keywords")]
void SearchForKeyWords(string[] keywords)
{
Result = wc.DownloadString(Url + HttpUtility.UrlEncode(string.Join(" ",keywords)));
}
[DSL("the result should contain '(?<myurl>.*)'")]
bool ResultShouldContain(string myurl)
{
return (Result??"").Contains(myurl);
}
[DSL("the result should contain '(?<avalue>.+)' and the following markup elements")]
bool ResultShouldContain(string avalue,string[] type,string[]inner)
{
if (string.IsNullOrEmpty(Result) ||type.Length==0)
return false;
if (!Result.Contains(avalue)) return false;
for (var i = 0;i < type.Length ; i++)
{
var searchstring = string.Format("<{0}>{1}</{0}>", type[i], inner[i]);
if (!Result.Contains(searchstring))
return false;
}
return true;
}
}
It looks a bit messy, but that's because it is a stupid example. A good example would be loading a repository with some products.
Enjoy !!