Skip to content

Commit

Permalink
Move parsing tests of different components to dedicated files
Browse files Browse the repository at this point in the history
  • Loading branch information
weelink committed Jul 17, 2019
1 parent 5431a3e commit 5cb573a
Show file tree
Hide file tree
Showing 4 changed files with 225 additions and 176 deletions.
92 changes: 92 additions & 0 deletions src/FluentSQL.Tests/Compilation/Parser/FromQueryParserTests.cs
@@ -0,0 +1,92 @@
using System.Linq;

using FluentAssertions;

using FluentSQL.Compilation.Parser;
using FluentSQL.Querying;
using FluentSQL.Querying.Statements.Extensions;
using FluentSQL.Tests.Builders;
using FluentSQL.Tests.Compilation.Parser.Builders;
using FluentSQL.Tests.Examples;
using FluentSQL.Tests.Examples.Builders;

using Xunit;

namespace FluentSQL.Tests.Compilation.Parser
{
public class FromQueryParserTests
{
public class When_parsing_without_an_alias : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
ExampleModel model = new ExampleModelBuilder().Build();

QueryContext =
model.Query<string>()
.From(() => model.Customers)
.QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_add_the_from_clause()
{
RootNode.ChildNodes.OfType<FromNode>().Should().ContainSingle();
}

[Fact]
public void It_should_have_no_alias()
{
RootNode.ChildNodes.OfType<FromNode>().Single().Alias.Should().BeNull();
}

private AstNode RootNode { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}

public class When_parsing_with_an_alias : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
Alias = new RandomStringBuilder().ThatStartsWithLetter.Build();
ExampleModel model = new ExampleModelBuilder().Build();

QueryContext =
model.Query<string>()
.From(() => model.Customers).As(Alias)
.QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_add_the_from_clause()
{
RootNode.ChildNodes.OfType<FromNode>().Should().ContainSingle();
}

[Fact]
public void It_should_have_the_alias()
{
RootNode.ChildNodes.OfType<FromNode>().Single().Alias.Should().Be(Alias);
}

private AstNode RootNode { get; set; }

private string Alias { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}
}
}
177 changes: 1 addition & 176 deletions src/FluentSQL.Tests/Compilation/Parser/QueryParserTests.cs
@@ -1,11 +1,5 @@
using System.Linq;

using FluentAssertions;

using FluentSQL.Compilation.Parser;
using FluentSQL.Compilation.Parser;
using FluentSQL.Querying;
using FluentSQL.Querying.Statements.Extensions;
using FluentSQL.Tests.Builders;
using FluentSQL.Tests.Compilation.Parser.Builders;
using FluentSQL.Tests.Compilation.Parser.Extensions;
using FluentSQL.Tests.Examples;
Expand Down Expand Up @@ -41,174 +35,5 @@ public void It_should_create_an_empty_node()
private AstNode RootNode { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}

public class When_parsing_a_from_statement_without_an_alias : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
ExampleModel model = new ExampleModelBuilder().Build();

QueryContext =
model.Query<string>()
.From(() => model.Customers)
.QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_add_the_from_clause()
{
RootNode.ChildNodes.OfType<FromNode>().Should().ContainSingle();
}

[Fact]
public void It_should_have_no_alias()
{
RootNode.ChildNodes.OfType<FromNode>().Single().Alias.Should().BeNull();
}

private AstNode RootNode { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}

public class When_parsing_a_from_statement_with_an_alias : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
Alias = new RandomStringBuilder().ThatStartsWithLetter.Build();
ExampleModel model = new ExampleModelBuilder().Build();

QueryContext =
model.Query<string>()
.From(() => model.Customers).As(Alias)
.QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_add_the_from_clause()
{
RootNode.ChildNodes.OfType<FromNode>().Should().ContainSingle();
}

[Fact]
public void It_should_have_the_alias()
{
RootNode.ChildNodes.OfType<FromNode>().Single().Alias.Should().Be(Alias);
}

private AstNode RootNode { get; set; }

private string Alias { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}

public class When_parsing_an_union : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
ExampleModel model = new ExampleModelBuilder().Build();

FirstAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();
SecondAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();

QueryComponent<NoParameters, string> first =
model.Query<string>()
.From(() => model.Customers).As(FirstAlias)
.Select(() => model.Customers.Name);

QueryComponent<NoParameters, string> second =
model.Query<string>()
.From(() => model.Invoices).As(SecondAlias)
.Select(() => model.Invoices.InvoiceNumber);

QueryContext = first.Union(second).QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_return_an_union_node()
{
RootNode.Should().BeOfType<UnionNode>();
}

[Fact]
public void It_should_contain_both_queries()
{
RootNode.As<UnionNode>().First.Should().Contain<FromNode>().Which.Should().HaveAlias(FirstAlias);
RootNode.As<UnionNode>().Second.Should().Contain<FromNode>().Which.Should().HaveAlias(SecondAlias);
}

private AstNode RootNode { get; set; }
private string FirstAlias { get; set; }
private string SecondAlias { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}

public class When_parsing_an_union_all : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
ExampleModel model = new ExampleModelBuilder().Build();

FirstAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();
SecondAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();

QueryComponent<NoParameters, string> first =
model.Query<string>()
.From(() => model.Customers).As(FirstAlias)
.Select(() => model.Customers.Name);

QueryComponent<NoParameters, string> second =
model.Query<string>()
.From(() => model.Invoices).As(SecondAlias)
.Select(() => model.Invoices.InvoiceNumber);

QueryContext = first.UnionAll(second).QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_return_an_union_node()
{
RootNode.Should().BeOfType<UnionAllNode>();
}

[Fact]
public void It_should_contain_both_queries()
{
RootNode.As<UnionAllNode>().First.Should().Contain<FromNode>().Which.Should().HaveAlias(FirstAlias);
RootNode.As<UnionAllNode>().Second.Should().Contain<FromNode>().Which.Should().HaveAlias(SecondAlias);
}

private AstNode RootNode { get; set; }
private string FirstAlias { get; set; }
private string SecondAlias { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}
}
}
66 changes: 66 additions & 0 deletions src/FluentSQL.Tests/Compilation/Parser/UnionAllQueryParserTests.cs
@@ -0,0 +1,66 @@
using FluentAssertions;

using FluentSQL.Compilation.Parser;
using FluentSQL.Querying;
using FluentSQL.Querying.Statements.Extensions;
using FluentSQL.Tests.Builders;
using FluentSQL.Tests.Compilation.Parser.Builders;
using FluentSQL.Tests.Compilation.Parser.Extensions;
using FluentSQL.Tests.Examples;
using FluentSQL.Tests.Examples.Builders;

using Xunit;

namespace FluentSQL.Tests.Compilation.Parser
{
public class UnionAllQueryParserTests
{
public class When_parsing : Specification<QueryParser>
{
protected override QueryParser EstablishContext()
{
ExampleModel model = new ExampleModelBuilder().Build();

FirstAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();
SecondAlias = new RandomStringBuilder().ThatStartsWithLetter.Build();

QueryComponent<NoParameters, string> first =
model.Query<string>()
.From(() => model.Customers).As(FirstAlias)
.Select(() => model.Customers.Name);

QueryComponent<NoParameters, string> second =
model.Query<string>()
.From(() => model.Invoices).As(SecondAlias)
.Select(() => model.Invoices.InvoiceNumber);

QueryContext = first.UnionAll(second).QueryContext;

return new QueryParserBuilder().Build();
}

protected override void Because(QueryParser sut)
{
RootNode = sut.Parse(QueryContext);
}

[Fact]
public void It_should_return_an_union_node()
{
RootNode.Should().BeOfType<UnionAllNode>();
}

[Fact]
public void It_should_contain_both_queries()
{
RootNode.As<UnionAllNode>().First.Should().Contain<FromNode>().Which.Should().HaveAlias(FirstAlias);
RootNode.As<UnionAllNode>().Second.Should().Contain<FromNode>().Which.Should().HaveAlias(SecondAlias);
}

private AstNode RootNode { get; set; }
private string FirstAlias { get; set; }
private string SecondAlias { get; set; }
private QueryContext<NoParameters, string> QueryContext { get; set; }
}
}
}

0 comments on commit 5cb573a

Please sign in to comment.