added some missing cancellation tokens and fixed incorrect tests

This commit is contained in:
Sean Garrett
2023-06-16 22:40:46 +01:00
parent f09cfc53c2
commit 23780697fb
25 changed files with 1077 additions and 175 deletions
+218
View File
@@ -0,0 +1,218 @@
# All Files
[*]
charset = utf-8
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
#########################################
# File Extension Settings
##########################################
# .NET Style Rules
# https://docs.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/language-rules#net-style-rules
[*.cs]
# "this." and "Me." qualifiers
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning
# Language keywords instead of framework type names for type references
dotnet_style_predefined_type_for_locals_parameters_members = true:warning
dotnet_style_predefined_type_for_member_access = true:warning
# Modifier preferences
dotnet_style_require_accessibility_modifiers = always:warning
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:warning
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:warning
dotnet_style_readonly_field = true:warning
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:warning
# Expression-level preferences
dotnet_style_object_initializer = true:warning
dotnet_style_collection_initializer = true:warning
dotnet_style_explicit_tuple_names = true:warning
dotnet_style_prefer_inferred_tuple_names = true:warning
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
dotnet_style_prefer_auto_properties = true:warning
dotnet_style_prefer_conditional_expression_over_assignment = false:suggestion
dotnet_diagnostic.IDE0045.severity = suggestion
dotnet_style_prefer_conditional_expression_over_return = false:suggestion
dotnet_diagnostic.IDE0046.severity = suggestion
dotnet_style_prefer_compound_assignment = true:warning
dotnet_style_prefer_simplified_interpolation = true:warning
dotnet_style_prefer_simplified_boolean_expressions = true:warning
# Null-checking preferences
dotnet_style_coalesce_expression = true:warning
dotnet_style_null_propagation = true:warning
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
# File header preferences
# file_header_template = <copyright file="{fileName}" company="PROJECT-AUTHOR">\n© PROJECT-AUTHOR\n</copyright>
# If you use StyleCop, you'll need to disable SA1636: File header copyright text should match.
# dotnet_diagnostic.SA1636.severity = none
# Undocumented
dotnet_style_operator_placement_when_wrapping = end_of_line:warning
csharp_style_prefer_null_check_over_type_check = true:warning
dotnet_analyzer_diagnostic.severity = warning
dotnet_code_quality_unused_parameters = all:warning
dotnet_remove_unnecessary_suppression_exclusions = none:warning
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false
dotnet_style_namespace_match_folder = true:suggestion
dotnet_diagnostic.IDE0130.severity = suggestion
dotnet_naming_style.camel_case_style.capitalization = camel_case
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
dotnet_naming_style.first_upper_style.capitalization = first_word_upper
dotnet_naming_style.prefix_interface_with_i_style.capitalization = pascal_case
dotnet_naming_style.prefix_interface_with_i_style.required_prefix = I
dotnet_naming_style.prefix_type_parameters_with_t_style.capitalization = pascal_case
dotnet_naming_style.prefix_type_parameters_with_t_style.required_prefix = T
dotnet_naming_style.disallowed_style.capitalization = pascal_case
dotnet_naming_style.disallowed_style.required_prefix = ____RULE_VIOLATION____
dotnet_naming_style.disallowed_style.required_suffix = ____RULE_VIOLATION____
dotnet_naming_style.internal_error_style.capitalization = pascal_case
dotnet_naming_style.internal_error_style.required_prefix = ____INTERNAL_ERROR____
dotnet_naming_style.internal_error_style.required_suffix = ____INTERNAL_ERROR____
dotnet_naming_symbols.public_protected_constant_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.public_protected_constant_fields_group.required_modifiers = const
dotnet_naming_symbols.public_protected_constant_fields_group.applicable_kinds = field
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.symbols = public_protected_constant_fields_group
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.style = pascal_case_style
dotnet_naming_rule.public_protected_constant_fields_must_be_pascal_case_rule.severity = warning
dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.public_protected_static_readonly_fields_group.required_modifiers = static, readonly
dotnet_naming_symbols.public_protected_static_readonly_fields_group.applicable_kinds = field
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.symbols = public_protected_static_readonly_fields_group
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.style = pascal_case_style
dotnet_naming_rule.public_protected_static_readonly_fields_must_be_pascal_case_rule.severity = warning
dotnet_naming_symbols.other_public_protected_fields_group.applicable_accessibilities = public, protected, protected_internal
dotnet_naming_symbols.other_public_protected_fields_group.applicable_kinds = field
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.symbols = other_public_protected_fields_group
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.style = disallowed_style
dotnet_naming_rule.other_public_protected_fields_disallowed_rule.severity = error
dotnet_naming_symbols.stylecop_constant_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private
dotnet_naming_symbols.stylecop_constant_fields_group.required_modifiers = const
dotnet_naming_symbols.stylecop_constant_fields_group.applicable_kinds = field
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.symbols = stylecop_constant_fields_group
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.style = pascal_case_style
dotnet_naming_rule.stylecop_constant_fields_must_be_pascal_case_rule.severity = warning
dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected, private
dotnet_naming_symbols.stylecop_static_readonly_fields_group.required_modifiers = static, readonly
dotnet_naming_symbols.stylecop_static_readonly_fields_group.applicable_kinds = field
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.symbols = stylecop_static_readonly_fields_group
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.style = pascal_case_style
dotnet_naming_rule.stylecop_static_readonly_fields_must_be_pascal_case_rule.severity = warning
dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_accessibilities = public, internal, protected_internal, protected, private_protected
dotnet_naming_symbols.stylecop_fields_must_be_private_group.applicable_kinds = field
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.symbols = stylecop_fields_must_be_private_group
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.style = disallowed_style
dotnet_naming_rule.stylecop_instance_fields_must_be_private_rule.severity = error
dotnet_naming_symbols.stylecop_private_fields_group.applicable_accessibilities = private
dotnet_naming_symbols.stylecop_private_fields_group.applicable_kinds = field
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.symbols = stylecop_private_fields_group
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.style = camel_case_style
dotnet_naming_rule.stylecop_private_fields_must_be_camel_case_rule.severity = warning
dotnet_naming_symbols.stylecop_local_fields_group.applicable_accessibilities = local
dotnet_naming_symbols.stylecop_local_fields_group.applicable_kinds = local
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.symbols = stylecop_local_fields_group
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.style = camel_case_style
dotnet_naming_rule.stylecop_local_fields_must_be_camel_case_rule.severity = silent
dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_accessibilities = *
dotnet_naming_symbols.sanity_check_uncovered_field_case_group.applicable_kinds = field
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.symbols = sanity_check_uncovered_field_case_group
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.style = internal_error_style
dotnet_naming_rule.sanity_check_uncovered_field_case_rule.severity = error
dotnet_naming_symbols.element_group.applicable_kinds = namespace, class, enum, struct, delegate, event, method, property
dotnet_naming_rule.element_rule.symbols = element_group
dotnet_naming_rule.element_rule.style = pascal_case_style
dotnet_naming_rule.element_rule.severity = warning
dotnet_naming_symbols.interface_group.applicable_kinds = interface
dotnet_naming_rule.interface_rule.symbols = interface_group
dotnet_naming_rule.interface_rule.style = prefix_interface_with_i_style
dotnet_naming_rule.interface_rule.severity = warning
dotnet_naming_symbols.type_parameter_group.applicable_kinds = type_parameter
dotnet_naming_rule.type_parameter_rule.symbols = type_parameter_group
dotnet_naming_rule.type_parameter_rule.style = prefix_type_parameters_with_t_style
dotnet_naming_rule.type_parameter_rule.severity = warning
dotnet_naming_symbols.parameters_group.applicable_kinds = parameter
dotnet_naming_rule.parameters_rule.symbols = parameters_group
dotnet_naming_rule.parameters_rule.style = camel_case_style
dotnet_naming_rule.parameters_rule.severity = warning
csharp_style_var_for_built_in_types = true:warning
csharp_style_var_when_type_is_apparent = true:warning
csharp_style_var_elsewhere = true:warning
csharp_style_expression_bodied_methods = true:warning
csharp_style_expression_bodied_constructors = true:warning
csharp_style_expression_bodied_operators = true:warning
csharp_style_expression_bodied_properties = true:warning
csharp_style_expression_bodied_indexers = true:warning
csharp_style_expression_bodied_accessors = true:warning
csharp_style_expression_bodied_lambdas = true:warning
csharp_style_expression_bodied_local_functions = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_prefer_switch_expression = true:warning
csharp_style_prefer_pattern_matching = true:warning
csharp_style_prefer_not_pattern = true:warning
csharp_style_inlined_variable_declaration = true:warning
csharp_prefer_simple_default_expression = true:warning
csharp_style_pattern_local_over_anonymous_function = true:warning
csharp_style_deconstructed_variable_declaration = true:warning
csharp_style_prefer_index_operator = true:warning
csharp_style_prefer_range_operator = true:warning
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
csharp_style_throw_expression = true:warning
csharp_style_conditional_delegate_call = true:warning
csharp_prefer_braces = true:warning
csharp_prefer_simple_using_statement = true:suggestion
dotnet_diagnostic.IDE0063.severity = suggestion
csharp_using_directive_placement = outside_namespace
csharp_prefer_static_local_function = true:warning
csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion
dotnet_diagnostic.IDE0058.severity = suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
dotnet_diagnostic.IDE0059.severity = suggestion
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = no_change
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents_when_block = false
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_after_comma = true
csharp_space_before_comma = false
csharp_space_after_dot = false
csharp_space_before_dot = false
csharp_space_after_semicolon_in_for_statement = true
csharp_space_before_semicolon_in_for_statement = false
csharp_space_around_declaration_statements = false
csharp_space_before_open_square_brackets = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_square_brackets = false
csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = true
csharp_style_namespace_declarations = file_scoped:warning
dotnet_diagnostic.CA1707.severity = none
@@ -12,13 +12,13 @@ namespace CoreUnitTests.BaseMongoRepositoryTests.AddTests;
public class AddManyTests : TestMongoRepositoryContext
{
[Fact]
public async Task AddManyAsync_EnsureTokenPassed()
{
// Arrange
Creator = new Mock<IMongoDbCreator>();
var token = new CancellationToken();
var token = new CancellationToken(true);
var documents = new List<TestDocument>
{
new(), new(), new()
@@ -30,4 +30,4 @@ public class AddManyTests : TestMongoRepositoryContext
// Assert
Creator.Verify(x => x.AddManyAsync<TestDocument, Guid>(documents, token));
}
}
}
@@ -16,7 +16,7 @@ public class AddOneTests : TestMongoRepositoryContext
{
// Arrange
Creator = new Mock<IMongoDbCreator>();
var token = new CancellationToken();
var token = new CancellationToken(true);
var document = new TestDocument();
// Act
@@ -25,4 +25,4 @@ public class AddOneTests : TestMongoRepositoryContext
// Assert
Creator.Verify(x => x.AddOneAsync<TestDocument, Guid>(document, token));
}
}
}
@@ -42,7 +42,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var documents = Fixture.CreateMany<TestDocument>().ToList();
var count = Fixture.Create<long>();
var cancellationToken = new CancellationToken();
var cancellationToken = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
@@ -89,7 +89,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
@@ -144,7 +144,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
@@ -193,19 +193,20 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var documents = Fixture.CreateMany<TestDocumentWithKey<int>>().ToList();
var count = Fixture.Create<long>();
var cancellationToken = new CancellationToken();
var cancellationToken = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteManyAsync<TestDocumentWithKey<int>, int>(It.IsAny<IEnumerable<TestDocumentWithKey<int>>>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(count);
.Setup(x => x.DeleteManyAsync<TestDocumentWithKey<int>, int>(documents, cancellationToken))
.ReturnsAsync(count)
.Verifiable();
// Act
var result = await Sut.DeleteManyAsync<TestDocumentWithKey<int>, int>(documents, cancellationToken);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteManyAsync<TestDocumentWithKey<int>, int>(documents, cancellationToken), Times.Once);
Eraser.Verify();
}
[Fact]
@@ -240,7 +241,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -295,7 +296,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -317,4 +318,4 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
}
#endregion
}
}
@@ -40,7 +40,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var document = Fixture.Create<TestDocument>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
@@ -85,7 +85,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
@@ -134,7 +134,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
@@ -180,7 +180,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var document = Fixture.Create<TestDocumentWithKey<int>>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
@@ -225,7 +225,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -274,7 +274,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -293,4 +293,4 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
}
#endregion
}
}
@@ -1,15 +1,16 @@
using System;
namespace CoreUnitTests.BaseMongoRepositoryTests.DeleteTests;
using System;
using System.Linq.Expressions;
using System.Threading;
using AutoFixture;
using CoreUnitTests.Infrastructure;
using CoreUnitTests.Infrastructure.Model;
using FluentAssertions;
using Infrastructure;
using Infrastructure.Model;
using MongoDbGenericRepository.DataAccess.Delete;
using Moq;
using Xunit;
namespace CoreUnitTests.BaseMongoRepositoryTests.DeleteTests;
public class DeleteOneTests : TestMongoRepositoryContext
{
[Fact]
@@ -21,7 +22,7 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<TestDocument>()))
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<TestDocument>(), It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -29,7 +30,28 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(document), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(document, CancellationToken.None), Times.Once);
}
[Fact]
public void WithDocumentAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var document = Fixture.Create<TestDocument>();
var count = Fixture.Create<long>();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<TestDocument>(), It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(document, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(document, token), Times.Once);
}
[Fact]
@@ -44,7 +66,7 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<Expression<Func<TestDocument, bool>>>(), It.IsAny<string>()))
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<Expression<Func<TestDocument, bool>>>(), It.IsAny<string>(), It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -52,7 +74,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, null), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, null, CancellationToken.None), Times.Once);
}
[Fact]
public void WithFilterAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(
x => x.DeleteOne<TestDocument, Guid>(
It.IsAny<Expression<Func<TestDocument, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(filter, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, null, token), Times.Once);
}
[Fact]
@@ -68,7 +118,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocument, Guid>(It.IsAny<Expression<Func<TestDocument, bool>>>(), It.IsAny<string>()))
.Setup(
x => x.DeleteOne<TestDocument, Guid>(
It.IsAny<Expression<Func<TestDocument, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -76,7 +130,36 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, partitionKey), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, partitionKey, CancellationToken.None), Times.Once);
}
[Fact]
public void WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocument, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(
x => x.DeleteOne<TestDocument, Guid>(
It.IsAny<Expression<Func<TestDocument, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(filter, partitionKey, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocument, Guid>(filter, partitionKey, token), Times.Once);
}
[Fact]
@@ -88,7 +171,7 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<TestDocumentWithKey<int>>()))
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<TestDocumentWithKey<int>>(), It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -96,8 +179,30 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document, CancellationToken.None), Times.Once);
}
[Fact]
public void WithKeyedDocumentAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var document = Fixture.Create<TestDocumentWithKey<int>>();
var count = Fixture.Create<long>();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<TestDocumentWithKey<int>>(), It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne<TestDocumentWithKey<int>, int>(document, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document, token), Times.Once);
}
[Fact]
public void Keyed_WithFilter_ShouldDeleteOne()
{
@@ -110,7 +215,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(), It.IsAny<string>()))
.Setup(
x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -118,7 +227,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null, CancellationToken.None), Times.Once);
}
[Fact]
public void Keyed_WithFilterAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(
x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne<TestDocumentWithKey<int>, int>(filter, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null, token), Times.Once);
}
[Fact]
@@ -134,7 +271,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(), It.IsAny<string>()))
.Setup(
x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -142,6 +283,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey, CancellationToken.None), Times.Once);
}
}
[Fact]
public void Keyed_WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(
x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey, token), Times.Once);
}
}
@@ -16,7 +16,7 @@ public class CreateAscendingIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock<IMongoDbIndexHandler>();
var token = new CancellationToken();
var token = new CancellationToken(true);
// Act
Expression<Func<TestDocument, object>> fieldExpression = t => t.SomeContent2;
@@ -26,4 +26,4 @@ public class CreateAscendingIndexTests : BaseIndexTests
IndexHandler.Verify(x => x.CreateAscendingIndexAsync<TestDocument, Guid>(
fieldExpression, null, null, token));
}*/
}
}
@@ -67,7 +67,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock<IMongoDbIndexHandler>();
var token = new CancellationToken();
var token = new CancellationToken(true);
// Act
await Sut.CreateTextIndexAsync<TestDocument>(_fieldExpression, token);
@@ -82,7 +82,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock<IMongoDbIndexHandler>();
var token = new CancellationToken();
var token = new CancellationToken(true);
var options = new IndexCreationOptions { Name = "theIndexName" };
// Act
@@ -99,7 +99,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
const string partitionKey = "thePartitionKey";
var token = new CancellationToken();
var token = new CancellationToken(true);
IndexHandler = new Mock<IMongoDbIndexHandler>();
// Act
@@ -130,7 +130,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock<IMongoDbIndexHandler>();
var token = new CancellationToken();
var token = new CancellationToken(true);
// Act
await Sut.CreateTextIndexAsync<TestDocumentWithKey, int>(t => t.SomeContent2, token);
@@ -179,7 +179,7 @@ public class CreateTextIndexTests : BaseIndexTests
// Arrange
const string partitionKey = "thePartitionKey";
const string indexName = "theIndexName";
var token = new CancellationToken();
var token = new CancellationToken(true);
var options = new IndexCreationOptions { Name = indexName };
IndexHandler = new Mock<IMongoDbIndexHandler>();
@@ -192,4 +192,4 @@ public class CreateTextIndexTests : BaseIndexTests
t => t.SomeContent2, options, partitionKey, token));
}
*/
}
}
@@ -37,7 +37,7 @@ public class GetIndexNamesTests : BaseIndexTests
{
// Arrange
const string indexName = "theIndexName";
var token = new CancellationToken();
var token = new CancellationToken(true);
IndexHandler = new Mock<IMongoDbIndexHandler>();
IndexHandler
.Setup(x => x.GetIndexesNamesAsync<TestDocument, Guid>(null, token))
@@ -78,7 +78,7 @@ public class GetIndexNamesTests : BaseIndexTests
// Arrange
const string partitionKey = "thePartitionKey";
const string indexName = "theIndexName";
var token = new CancellationToken();
var token = new CancellationToken(true);
IndexHandler = new Mock<IMongoDbIndexHandler>();
IndexHandler
@@ -117,7 +117,7 @@ public class GetIndexNamesTests : BaseIndexTests
{
// Arrange
const string indexName = "theIndexName";
var token = new CancellationToken();
var token = new CancellationToken(true);
IndexHandler = new Mock<IMongoDbIndexHandler>();
IndexHandler
.Setup(x => x.GetIndexesNamesAsync<TestDocumentWithKey, int>(null, token))
@@ -157,7 +157,7 @@ public class GetIndexNamesTests : BaseIndexTests
// Arrange
const string indexName = "theIndexName";
const string partitionKey = "thePartitionKey";
var token = new CancellationToken();
var token = new CancellationToken(true);
IndexHandler = new Mock<IMongoDbIndexHandler>();
IndexHandler
@@ -171,4 +171,4 @@ public class GetIndexNamesTests : BaseIndexTests
Assert.NotNull(result);
Assert.Contains(result, x => x == indexName);
}*/
}
}
@@ -16,7 +16,7 @@ public class AnyTests : TestMongoRepositoryContext
public async Task AnyAsync_EnsureTokenPassed()
{
// Arrange
var token = new CancellationToken();
var token = new CancellationToken(true);
Reader = new Mock<IMongoDbReader>();
Reader
@@ -31,4 +31,4 @@ public class AnyTests : TestMongoRepositoryContext
.Verify(x => x.AnyAsync<TestDocument, Guid>(
t => string.IsNullOrWhiteSpace(t.SomeContent2), null, token));
}*/
}
}
@@ -16,7 +16,7 @@ public class CountTests : TestMongoRepositoryContext
public async Task CountAsync_EnsureTokenPassed()
{
// Arrange
var token = new CancellationToken();
var token = new CancellationToken(true);
Reader = new Mock<IMongoDbReader>();
Reader
@@ -31,4 +31,4 @@ public class CountTests : TestMongoRepositoryContext
Reader.Verify(x => x.CountAsync<TestDocument, Guid>(
t => string.IsNullOrWhiteSpace(t.SomeContent2), null, token));
}*/
}
}
+3
View File
@@ -5,10 +5,13 @@
<Nullable>warnings</Nullable>
<IsPackable>false</IsPackable>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest</AnalysisLevel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.18.0" />
<PackageReference Include="AutoFixture.AutoMoq" Version="4.18.0" />
<PackageReference Include="FluentAssertions" Version="6.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="Moq" Version="4.18.4" />
@@ -0,0 +1,202 @@
using System;
using System.Linq.Expressions;
using System.Threading;
using AutoFixture;
using CoreUnitTests.Infrastructure;
using CoreUnitTests.Infrastructure.Model;
using FluentAssertions;
using MongoDB.Driver;
using MongoDbGenericRepository;
using MongoDbGenericRepository.DataAccess.Delete;
using Moq;
using Xunit;
namespace CoreUnitTests.DataAccessTests.MongoDbEraserTests;
public class DeleteOneTests : GenericTestContext<MongoDbEraser>
{
[Fact]
public void WithDocument_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(null))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(document);
// Assert
result.Should().Be(count);
var expectedFilter = Builders<TestDocument>.Filter.Eq("Id", document.Id);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(expectedFilter)),
CancellationToken.None));
}
[Fact]
public void WithDocumentAndCancellationToken_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var token = new CancellationToken(true);
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(null))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(document, token);
// Assert
result.Should().Be(count);
var expectedFilter = Builders<TestDocument>.Filter.Eq("Id", document.Id);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(expectedFilter)),
token));
}
[Fact]
public void WithFilter_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(null))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
Expression<Func<TestDocument, bool>> filter = d => d.SomeContent == document.SomeContent;
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(filter);
// Assert
result.Should().Be(count);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(filter)), CancellationToken.None));
}
[Fact]
public void WithFilterAndCancellationToken_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var token = new CancellationToken(true);
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(null))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
Expression<Func<TestDocument, bool>> filter = d => d.Id == document.Id;
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(filter, cancellationToken: token);
// Assert
result.Should().Be(count);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(filter)), token));
}
[Fact]
public void WithFilterAndPartitionKey_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var partitionKey = Fixture.Create<string>();
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(It.IsAny<string>()))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
Expression<Func<TestDocument, bool>> filter = d => d.Id == document.Id;
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(filter, partitionKey);
// Assert
result.Should().Be(count);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(filter)), CancellationToken.None));
dbContext.Verify(x => x.GetCollection<TestDocument>(partitionKey));
}
[Fact]
public void WithFilterAndPartitionKeyAndCancellationToken_DeletesOne()
{
// Arrange
var count = Fixture.Create<long>();
var document = Fixture.Create<TestDocument>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken(true);
var collection = MockOf<IMongoCollection<TestDocument>>();
collection
.Setup(x => x.DeleteOne(It.IsAny<FilterDefinition<TestDocument>>(), It.IsAny<CancellationToken>()))
.Returns(new DeleteResult.Acknowledged(count));
var dbContext = MockOf<IMongoDbContext>();
dbContext
.Setup(x => x.GetCollection<TestDocument>(It.IsAny<string>()))
.Returns(Fixture.Create<IMongoCollection<TestDocument>>());
Expression<Func<TestDocument, bool>> filter = d => d.Id == document.Id;
// Act
var result = Sut.DeleteOne<TestDocument, Guid>(filter, partitionKey, token);
// Assert
result.Should().Be(count);
collection.Verify(
x => x.DeleteOne(
It.Is<FilterDefinition<TestDocument>>(f => f.EquivalentTo(filter)), token));
dbContext.Verify(x => x.GetCollection<TestDocument>(partitionKey));
}
}
@@ -0,0 +1,14 @@
namespace CoreUnitTests.Infrastructure;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
public static class FilterDefinitionExtensions
{
public static string RenderToJson<TDocument>(this FilterDefinition<TDocument> filter)
=> filter.Render(BsonSerializer.SerializerRegistry.GetSerializer<TDocument>(), BsonSerializer.SerializerRegistry).ToJson();
public static bool EquivalentTo<TDocument>(this FilterDefinition<TDocument> filter, FilterDefinition<TDocument> other)
=> filter.RenderToJson() == other.RenderToJson();
}
@@ -0,0 +1,23 @@
using AutoFixture;
using AutoFixture.AutoMoq;
using Moq;
namespace CoreUnitTests.Infrastructure;
public class GenericTestContext<TSut>
{
public GenericTestContext()
{
Fixture = new Fixture().Customize(new AutoMoqCustomization());
}
protected Mock<T> MockOf<T>()
where T : class
{
return Fixture.Freeze<Mock<T>>();
}
protected IFixture Fixture { get; set; }
protected TSut Sut { get => Fixture.Create<TSut>(); }
}
@@ -0,0 +1,9 @@
using MongoDbGenericRepository.Models;
namespace CoreUnitTests.Infrastructure.Model;
public class PartitionedTestDocument : TestDocument, IPartitionedDocument
{
/// <inheritdoc />
public string PartitionKey { get; set; } = "PartitionedTestDocument";
}
@@ -42,7 +42,7 @@ public class DeleteManyAsyncTests : TestKeyedMongoRepositoryContext<int>
// Arrange
var documents = Fixture.CreateMany<TestDocumentWithKey<int>>().ToList();
var count = Fixture.Create<long>();
var cancellationToken = new CancellationToken();
var cancellationToken = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
@@ -89,7 +89,7 @@ public class DeleteManyAsyncTests : TestKeyedMongoRepositoryContext<int>
// Arrange
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -144,7 +144,7 @@ public class DeleteManyAsyncTests : TestKeyedMongoRepositoryContext<int>
var content = Fixture.Create<string>();
var count = Fixture.Create<long>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -164,4 +164,4 @@ public class DeleteManyAsyncTests : TestKeyedMongoRepositoryContext<int>
result.Should().Be(count);
Eraser.Verify(x => x.DeleteManyAsync<TestDocumentWithKey<int>, int>(filter, partitionKey, token), Times.Once);
}
}
}
@@ -40,7 +40,7 @@ public class DeleteOneAsyncTests : TestKeyedMongoRepositoryContext<int>
// Arrange
var document = Fixture.Create<TestDocumentWithKey<int>>();
var count = Fixture.Create<long>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
@@ -85,7 +85,7 @@ public class DeleteOneAsyncTests : TestKeyedMongoRepositoryContext<int>
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -134,7 +134,7 @@ public class DeleteOneAsyncTests : TestKeyedMongoRepositoryContext<int>
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
@@ -151,4 +151,4 @@ public class DeleteOneAsyncTests : TestKeyedMongoRepositoryContext<int>
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOneAsync<TestDocumentWithKey<int>, int>(filter, partitionKey, token), Times.Once);
}
}
}
@@ -1,5 +1,6 @@
using System;
using System.Linq.Expressions;
using System.Threading;
using AutoFixture;
using CoreUnitTests.Infrastructure;
using CoreUnitTests.Infrastructure.Model;
@@ -21,7 +22,9 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<TestDocumentWithKey<int>>()))
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<TestDocumentWithKey<int>>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -29,7 +32,30 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document, CancellationToken.None), Times.Once);
}
[Fact]
public void WithDocumentAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var document = Fixture.Create<TestDocumentWithKey<int>>();
var count = Fixture.Create<long>();
var token = new CancellationToken(true);
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<TestDocumentWithKey<int>>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(document, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(document, token), Times.Once);
}
[Fact]
@@ -44,7 +70,10 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(), It.IsAny<string>()))
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -52,7 +81,34 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null, CancellationToken.None), Times.Once);
}
[Fact]
public void WithFilterAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(filter, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, null, token), Times.Once);
}
[Fact]
@@ -68,7 +124,10 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(), It.IsAny<string>()))
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
@@ -76,6 +135,34 @@ public class DeleteOneTests : TestKeyedMongoRepositoryContext<int>
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey), Times.Once);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey, CancellationToken.None), Times.Once);
}
}
[Fact]
public void WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne()
{
// Arrange
var count = Fixture.Create<long>();
var content = Fixture.Create<string>();
var partitionKey = Fixture.Create<string>();
var token = new CancellationToken(true);
Expression<Func<TestDocumentWithKey<int>, bool>> filter = x => x.SomeContent == content;
Eraser = new Mock<IMongoDbEraser>();
Eraser
.Setup(x => x.DeleteOne<TestDocumentWithKey<int>, int>(
It.IsAny<Expression<Func<TestDocumentWithKey<int>, bool>>>(),
It.IsAny<string>(),
It.IsAny<CancellationToken>()))
.Returns(count);
// Act
var result = Sut.DeleteOne(filter, partitionKey, token);
// Assert
result.Should().Be(count);
Eraser.Verify(x => x.DeleteOne<TestDocumentWithKey<int>, int>(filter, partitionKey, token), Times.Once);
}
}