Skip to content

Commit

Permalink
Merge pull request #55 from pBouillon/dev-2.1.0
Browse files Browse the repository at this point in the history
Dev 2.1.0
  • Loading branch information
pBouillon authored Jul 26, 2020
2 parents 17ca7ca + ecefbe5 commit 5f09f59
Show file tree
Hide file tree
Showing 56 changed files with 3,071 additions and 448 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/dotnetcore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@ jobs:

steps:
- uses: actions/checkout@v2

- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.100

- name: Build with dotnet
run: dotnet build MqttTopicBuilder.sln --configuration Release

test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.100

- name: Test with dotnet
run: dotnet test MqttTopicBuilder.sln
4 changes: 2 additions & 2 deletions .github/workflows/nuget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.100

- name: publish on nuget
run: |
dotnet pack --configuration Release
dotnet nuget push MqttTopicBuilder/bin/Release/MqttTopicBuilder.2.0.2.nupkg -k ${{ secrets.NugetApiKey }} -s https://api.nuget.org/v3/index.json
dotnet nuget push MqttTopicBuilder/bin/Release/MqttTopicBuilder.2.1.0.nupkg -k ${{ secrets.NugetApiKey }} -s https://api.nuget.org/v3/index.json
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.1.0] - 2020-06-26

### Added

- Add [codefactor](https://www.codefactor.io/repository/github/pbouillon/mqtttopicbuilder) to CI for quality checks
- Add UTF-8 check on topic creation
- Add modes depending on the consumer of the topic builder (PUB/SUB)

### Changed

- Rework topic validation using validation pipelines and rules
- `Topic` can now be used as a value object
- Set C# version to 8

### Deprecated

- `TopicBuilder` constructors that does not specify the type of the consumer
using it

### Fixed

- Fixed a unit test that would potentially fail on random values

## [2.0.2] - 2020-06-29

### Changed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
/*
* Author
* Pierre Bouillon - https://github.com/pBouillon
*
* Repository
* MqttTopicBuilder - https://github.com/pBouillon/MqttTopicBuilder
*
* License
* MIT - https://github.com/pBouillon/MqttTopicBuilder/blob/master/LICENSE
*/

using AutoFixture;
using FluentAssertions;
using MqttTopicBuilder.Builder;
using MqttTopicBuilder.Builder.BuilderState;
using MqttTopicBuilder.Constants;
using MqttTopicBuilder.Exceptions.Classes;
using MqttTopicBuilder.UnitTests.Utils;
using System;
using System.Collections.Generic;
using Xunit;

namespace MqttTopicBuilder.UnitTests.Builder.BuilderState
{
/// <summary>
/// Unit test suite for <see cref="PublisherState"/>
/// </summary>
public class PublisherStateUnitTests
{
/// <summary>
/// Private instance of <see cref="IFixture"/> for test data generation purposes
/// </summary>
private static readonly IFixture Fixture = new Fixture();

/// <summary>
/// Ensure that the multi-level wildcard addition is prevented
/// </summary>
[Fact]
public void AddMultiLevelWildcard()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new PublisherState(topicBuilder);

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddMultiLevelWildcard();

// Assert
addingMultiLevelWildcard.Should()
.Throw<IllegalStateOperationException>(
"because adding a wildcard is not allowed when publishing");
}

/// <summary>
/// Ensure that the topic addition is allowed
/// </summary>
[Fact]
public void AddTopic()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new PublisherState(topicBuilder);

var topic = TestUtils.GenerateSingleValidTopic();

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddTopic(topic);

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a topic should be allowed on subscribe");
}

/// <summary>
/// Ensure that topics addition is allowed
/// </summary>
[Fact]
public void AddTopics()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new PublisherState(topicBuilder);

var count = Fixture.Create<int>() % Mqtt.Topic.MaximumAllowedLevels;
var topics = new Queue<string>();

for (var i = 0; i < count; ++i)
{
topics.Enqueue(TestUtils.GenerateSingleValidTopic());
}

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddTopics(topics);

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a topic should be allowed on subscribe");
}

/// <summary>
/// Ensure that the single-level wildcard addition is forbidden
/// </summary>
[Fact]
public void AddSingleLevelWildcard()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new PublisherState(topicBuilder);

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddSingleLevelWildcard();

// Assert
addingMultiLevelWildcard.Should()
.Throw<MqttBaseException>(
"because adding a topic should not be allowed on subscribe");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
/*
* Author
* Pierre Bouillon - https://github.com/pBouillon
*
* Repository
* MqttTopicBuilder - https://github.com/pBouillon/MqttTopicBuilder
*
* License
* MIT - https://github.com/pBouillon/MqttTopicBuilder/blob/master/LICENSE
*/

using AutoFixture;
using FluentAssertions;
using MqttTopicBuilder.Builder;
using MqttTopicBuilder.Builder.BuilderState;
using MqttTopicBuilder.Constants;
using MqttTopicBuilder.Exceptions.Classes;
using MqttTopicBuilder.UnitTests.Utils;
using System;
using System.Collections.Generic;
using Xunit;

namespace MqttTopicBuilder.UnitTests.Builder.BuilderState
{
/// <summary>
/// Unit test suite for <see cref="PublisherState"/>
/// </summary>
public class SubscriberStateUnitTests
{
/// <summary>
/// Private instance of <see cref="IFixture"/> for test data generation purposes
/// </summary>
private static readonly IFixture Fixture = new Fixture();

/// <summary>
/// Ensure that the multi-level wildcard addition is allowed
/// </summary>
[Fact]
public void AddMultiLevelWildcard()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new SubscriberState(topicBuilder);

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddMultiLevelWildcard();

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a wildcard is allowed when subscribing");
}

/// <summary>
/// Ensure that the topic addition is allowed
/// </summary>
[Fact]
public void AddTopic()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new SubscriberState(topicBuilder);

var topic = TestUtils.GenerateSingleValidTopic();

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddTopic(topic);

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a topic should be allowed on subscribe");
}

/// <summary>
/// Ensure that topics addition is allowed
/// </summary>
[Fact]
public void AddTopics()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new SubscriberState(topicBuilder);

var count = Fixture.Create<int>() % Mqtt.Topic.MaximumAllowedLevels;
var topics = new Queue<string>();

for (var i = 0; i < count; ++i)
{
topics.Enqueue(TestUtils.GenerateSingleValidTopic());
}

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddTopics(topics);

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a topic should be allowed on subscribe");
}

/// <summary>
/// Ensure that the single-level wildcard addition is allowed
/// </summary>
[Fact]
public void AddSingleLevelWildcard()
{
// Arrange
var topicBuilder = Fixture.Create<TopicBuilder>();
var subscriberState = new SubscriberState(topicBuilder);

// Act
Action addingMultiLevelWildcard = () =>
subscriberState.AddSingleLevelWildcard();

// Assert
addingMultiLevelWildcard.Should()
.NotThrow<MqttBaseException>(
"because adding a wildcard is allowed when subscribing");
}
}
}
Loading

0 comments on commit 5f09f59

Please sign in to comment.