diff --git a/CoreUnitTests/.editorconfig b/CoreUnitTests/.editorconfig
new file mode 100644
index 0000000..4db872d
--- /dev/null
+++ b/CoreUnitTests/.editorconfig
@@ -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 = \n© PROJECT-AUTHOR\n
+# 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
+
+
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddManyTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddManyTests.cs
index 292e451..3fd2788 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddManyTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddManyTests.cs
@@ -12,13 +12,13 @@ namespace CoreUnitTests.BaseMongoRepositoryTests.AddTests;
public class AddManyTests : TestMongoRepositoryContext
{
-
+
[Fact]
public async Task AddManyAsync_EnsureTokenPassed()
{
// Arrange
Creator = new Mock();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
var documents = new List
{
new(), new(), new()
@@ -30,4 +30,4 @@ public class AddManyTests : TestMongoRepositoryContext
// Assert
Creator.Verify(x => x.AddManyAsync(documents, token));
}
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddOneTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddOneTests.cs
index dc290da..6396c7f 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddOneTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/AddTests/AddOneTests.cs
@@ -16,7 +16,7 @@ public class AddOneTests : TestMongoRepositoryContext
{
// Arrange
Creator = new Mock();
- 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(document, token));
}
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteManyAsyncTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteManyAsyncTests.cs
index 83b8f21..2feed33 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteManyAsyncTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteManyAsyncTests.cs
@@ -42,7 +42,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var documents = Fixture.CreateMany().ToList();
var count = Fixture.Create();
- var cancellationToken = new CancellationToken();
+ var cancellationToken = new CancellationToken(true);
Eraser = new Mock();
Eraser
@@ -89,7 +89,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var content = Fixture.Create();
var count = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression> filter = x => x.SomeContent == content;
@@ -144,7 +144,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
var content = Fixture.Create();
var count = Fixture.Create();
var partitionKey = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression> filter = x => x.SomeContent == content;
@@ -193,19 +193,20 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var documents = Fixture.CreateMany>().ToList();
var count = Fixture.Create();
- var cancellationToken = new CancellationToken();
+ var cancellationToken = new CancellationToken(true);
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteManyAsync, int>(It.IsAny>>(), It.IsAny()))
- .ReturnsAsync(count);
+ .Setup(x => x.DeleteManyAsync, int>(documents, cancellationToken))
+ .ReturnsAsync(count)
+ .Verifiable();
// Act
var result = await Sut.DeleteManyAsync, int>(documents, cancellationToken);
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteManyAsync, int>(documents, cancellationToken), Times.Once);
+ Eraser.Verify();
}
[Fact]
@@ -240,7 +241,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
// Arrange
var content = Fixture.Create();
var count = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression, bool>> filter = x => x.SomeContent == content;
@@ -295,7 +296,7 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
var content = Fixture.Create();
var count = Fixture.Create();
var partitionKey = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression, bool>> filter = x => x.SomeContent == content;
@@ -317,4 +318,4 @@ public class DeleteManyAsyncTests : TestMongoRepositoryContext
}
#endregion
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneAsyncTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneAsyncTests.cs
index d99e762..9f0fcfe 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneAsyncTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneAsyncTests.cs
@@ -40,7 +40,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var document = Fixture.Create();
var count = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Eraser = new Mock();
@@ -85,7 +85,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var count = Fixture.Create();
var content = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression> filter = x => x.SomeContent == content;
@@ -134,7 +134,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
var count = Fixture.Create();
var content = Fixture.Create();
var partitionKey = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression> filter = x => x.SomeContent == content;
@@ -180,7 +180,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var document = Fixture.Create>();
var count = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Eraser = new Mock();
@@ -225,7 +225,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
// Arrange
var count = Fixture.Create();
var content = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression, bool>> filter = x => x.SomeContent == content;
@@ -274,7 +274,7 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
var count = Fixture.Create();
var content = Fixture.Create();
var partitionKey = Fixture.Create();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
Expression, bool>> filter = x => x.SomeContent == content;
@@ -293,4 +293,4 @@ public class DeleteOneAsyncTests : TestMongoRepositoryContext
}
#endregion
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneTests.cs
index 5d6385c..bb23e69 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/DeleteTests/DeleteOneTests.cs
@@ -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();
Eraser
- .Setup(x => x.DeleteOne(It.IsAny()))
+ .Setup(x => x.DeleteOne(It.IsAny(), It.IsAny()))
.Returns(count);
// Act
@@ -29,7 +30,28 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne(document), Times.Once);
+ Eraser.Verify(x => x.DeleteOne(document, CancellationToken.None), Times.Once);
+ }
+
+ [Fact]
+ public void WithDocumentAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var document = Fixture.Create();
+ var count = Fixture.Create();
+ var token = new CancellationToken(true);
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(x => x.DeleteOne(It.IsAny(), It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne(document, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne(document, token), Times.Once);
}
[Fact]
@@ -44,7 +66,7 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteOne(It.IsAny>>(), It.IsAny()))
+ .Setup(x => x.DeleteOne(It.IsAny>>(), It.IsAny(), It.IsAny()))
.Returns(count);
// Act
@@ -52,7 +74,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne(filter, null), Times.Once);
+ Eraser.Verify(x => x.DeleteOne(filter, null, CancellationToken.None), Times.Once);
+ }
+
+ [Fact]
+ public void WithFilterAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var content = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ Expression> filter = x => x.SomeContent == content;
+
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(
+ x => x.DeleteOne(
+ It.IsAny>>(),
+ It.IsAny(),
+ It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne(filter, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne(filter, null, token), Times.Once);
}
[Fact]
@@ -68,7 +118,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteOne(It.IsAny>>(), It.IsAny()))
+ .Setup(
+ x => x.DeleteOne(
+ It.IsAny>>(),
+ It.IsAny(),
+ It.IsAny()))
.Returns(count);
// Act
@@ -76,7 +130,36 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne(filter, partitionKey), Times.Once);
+ Eraser.Verify(x => x.DeleteOne(filter, partitionKey, CancellationToken.None), Times.Once);
+ }
+
+ [Fact]
+ public void WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var content = Fixture.Create();
+ var partitionKey = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ Expression> filter = x => x.SomeContent == content;
+
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(
+ x => x.DeleteOne(
+ It.IsAny>>(),
+ It.IsAny(),
+ It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne(filter, partitionKey, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne(filter, partitionKey, token), Times.Once);
}
[Fact]
@@ -88,7 +171,7 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteOne, int>(It.IsAny>()))
+ .Setup(x => x.DeleteOne, int>(It.IsAny>(), It.IsAny()))
.Returns(count);
// Act
@@ -96,8 +179,30 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne, int>(document), Times.Once);
+ Eraser.Verify(x => x.DeleteOne, int>(document, CancellationToken.None), Times.Once);
}
+
+ [Fact]
+ public void WithKeyedDocumentAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var document = Fixture.Create>();
+ var count = Fixture.Create();
+ var token = new CancellationToken(true);
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(x => x.DeleteOne, int>(It.IsAny>(), It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne, int>(document, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne, int>(document, token), Times.Once);
+ }
+
[Fact]
public void Keyed_WithFilter_ShouldDeleteOne()
{
@@ -110,7 +215,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteOne, int>(It.IsAny, bool>>>(), It.IsAny()))
+ .Setup(
+ x => x.DeleteOne, int>(
+ It.IsAny, bool>>>(),
+ It.IsAny(),
+ It.IsAny()))
.Returns(count);
// Act
@@ -118,7 +227,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne, int>(filter, null), Times.Once);
+ Eraser.Verify(x => x.DeleteOne, int>(filter, null, CancellationToken.None), Times.Once);
+ }
+
+ [Fact]
+ public void Keyed_WithFilterAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var content = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ Expression, bool>> filter = x => x.SomeContent == content;
+
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(
+ x => x.DeleteOne, int>(
+ It.IsAny, bool>>>(),
+ It.IsAny(),
+ It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne, int>(filter, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne, int>(filter, null, token), Times.Once);
}
[Fact]
@@ -134,7 +271,11 @@ public class DeleteOneTests : TestMongoRepositoryContext
Eraser = new Mock();
Eraser
- .Setup(x => x.DeleteOne, int>(It.IsAny, bool>>>(), It.IsAny()))
+ .Setup(
+ x => x.DeleteOne, int>(
+ It.IsAny, bool>>>(),
+ It.IsAny(),
+ It.IsAny()))
.Returns(count);
// Act
@@ -142,6 +283,35 @@ public class DeleteOneTests : TestMongoRepositoryContext
// Assert
result.Should().Be(count);
- Eraser.Verify(x => x.DeleteOne, int>(filter, partitionKey), Times.Once);
+ Eraser.Verify(x => x.DeleteOne, int>(filter, partitionKey, CancellationToken.None), Times.Once);
}
-}
\ No newline at end of file
+
+ [Fact]
+ public void Keyed_WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var content = Fixture.Create();
+ var partitionKey = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ Expression, bool>> filter = x => x.SomeContent == content;
+
+ Eraser = new Mock();
+
+ Eraser
+ .Setup(
+ x => x.DeleteOne, int>(
+ It.IsAny, bool>>>(),
+ It.IsAny(),
+ It.IsAny()))
+ .Returns(count);
+
+ // Act
+ var result = Sut.DeleteOne, int>(filter, partitionKey, token);
+
+ // Assert
+ result.Should().Be(count);
+ Eraser.Verify(x => x.DeleteOne, int>(filter, partitionKey, token), Times.Once);
+ }
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateAscendingIndexTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateAscendingIndexTests.cs
index abdb22c..85b5b70 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateAscendingIndexTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateAscendingIndexTests.cs
@@ -16,7 +16,7 @@ public class CreateAscendingIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
// Act
Expression> fieldExpression = t => t.SomeContent2;
@@ -26,4 +26,4 @@ public class CreateAscendingIndexTests : BaseIndexTests
IndexHandler.Verify(x => x.CreateAscendingIndexAsync(
fieldExpression, null, null, token));
}*/
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateTextIndexTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateTextIndexTests.cs
index 0d216d3..e7dd3be 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateTextIndexTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/CreateTextIndexTests.cs
@@ -67,7 +67,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
// Act
await Sut.CreateTextIndexAsync(_fieldExpression, token);
@@ -82,7 +82,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock();
- 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();
// Act
@@ -130,7 +130,7 @@ public class CreateTextIndexTests : BaseIndexTests
{
// Arrange
IndexHandler = new Mock();
- var token = new CancellationToken();
+ var token = new CancellationToken(true);
// Act
await Sut.CreateTextIndexAsync(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();
@@ -192,4 +192,4 @@ public class CreateTextIndexTests : BaseIndexTests
t => t.SomeContent2, options, partitionKey, token));
}
*/
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/GetIndexNamesTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/GetIndexNamesTests.cs
index 9fbae96..a23350a 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/GetIndexNamesTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/IndexTests/GetIndexNamesTests.cs
@@ -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();
IndexHandler
.Setup(x => x.GetIndexesNamesAsync(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();
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();
IndexHandler
.Setup(x => x.GetIndexesNamesAsync(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();
IndexHandler
@@ -171,4 +171,4 @@ public class GetIndexNamesTests : BaseIndexTests
Assert.NotNull(result);
Assert.Contains(result, x => x == indexName);
}*/
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/MainTests/AnyTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/MainTests/AnyTests.cs
index a697fe5..7d8c18d 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/MainTests/AnyTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/MainTests/AnyTests.cs
@@ -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();
Reader
@@ -31,4 +31,4 @@ public class AnyTests : TestMongoRepositoryContext
.Verify(x => x.AnyAsync(
t => string.IsNullOrWhiteSpace(t.SomeContent2), null, token));
}*/
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/BaseMongoRepositoryTests/MainTests/CountTests.cs b/CoreUnitTests/BaseMongoRepositoryTests/MainTests/CountTests.cs
index f84db84..7c5c0c2 100644
--- a/CoreUnitTests/BaseMongoRepositoryTests/MainTests/CountTests.cs
+++ b/CoreUnitTests/BaseMongoRepositoryTests/MainTests/CountTests.cs
@@ -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();
Reader
@@ -31,4 +31,4 @@ public class CountTests : TestMongoRepositoryContext
Reader.Verify(x => x.CountAsync(
t => string.IsNullOrWhiteSpace(t.SomeContent2), null, token));
}*/
-}
\ No newline at end of file
+}
diff --git a/CoreUnitTests/CoreUnitTests.csproj b/CoreUnitTests/CoreUnitTests.csproj
index 3e3ce97..d417073 100644
--- a/CoreUnitTests/CoreUnitTests.csproj
+++ b/CoreUnitTests/CoreUnitTests.csproj
@@ -5,10 +5,13 @@
warnings
false
+ true
+ latest
+
diff --git a/CoreUnitTests/DataAccessTests/MongoDbEraserTests/DeleteOneTests.cs b/CoreUnitTests/DataAccessTests/MongoDbEraserTests/DeleteOneTests.cs
new file mode 100644
index 0000000..a3506be
--- /dev/null
+++ b/CoreUnitTests/DataAccessTests/MongoDbEraserTests/DeleteOneTests.cs
@@ -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
+{
+ [Fact]
+ public void WithDocument_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+ var collection = MockOf>();
+
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(null))
+ .Returns(Fixture.Create>());
+
+ // Act
+ var result = Sut.DeleteOne(document);
+
+ // Assert
+ result.Should().Be(count);
+
+ var expectedFilter = Builders.Filter.Eq("Id", document.Id);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is>(f => f.EquivalentTo(expectedFilter)),
+ CancellationToken.None));
+ }
+
+ [Fact]
+ public void WithDocumentAndCancellationToken_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ var collection = MockOf>();
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(null))
+ .Returns(Fixture.Create>());
+
+ // Act
+ var result = Sut.DeleteOne(document, token);
+
+ // Assert
+ result.Should().Be(count);
+
+ var expectedFilter = Builders.Filter.Eq("Id", document.Id);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is>(f => f.EquivalentTo(expectedFilter)),
+ token));
+ }
+
+ [Fact]
+ public void WithFilter_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+
+ var collection = MockOf>();
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(null))
+ .Returns(Fixture.Create>());
+
+ Expression> filter = d => d.SomeContent == document.SomeContent;
+
+ // Act
+ var result = Sut.DeleteOne(filter);
+
+ // Assert
+ result.Should().Be(count);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is>(f => f.EquivalentTo(filter)), CancellationToken.None));
+ }
+
+ [Fact]
+ public void WithFilterAndCancellationToken_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ var collection = MockOf>();
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(null))
+ .Returns(Fixture.Create>());
+
+ Expression> filter = d => d.Id == document.Id;
+
+ // Act
+ var result = Sut.DeleteOne(filter, cancellationToken: token);
+
+ // Assert
+ result.Should().Be(count);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is>(f => f.EquivalentTo(filter)), token));
+ }
+
+ [Fact]
+ public void WithFilterAndPartitionKey_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+ var partitionKey = Fixture.Create();
+
+ var collection = MockOf>();
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(It.IsAny()))
+ .Returns(Fixture.Create>());
+
+ Expression> filter = d => d.Id == document.Id;
+
+ // Act
+ var result = Sut.DeleteOne(filter, partitionKey);
+
+ // Assert
+ result.Should().Be(count);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is>(f => f.EquivalentTo(filter)), CancellationToken.None));
+
+ dbContext.Verify(x => x.GetCollection(partitionKey));
+ }
+
+ [Fact]
+ public void WithFilterAndPartitionKeyAndCancellationToken_DeletesOne()
+ {
+ // Arrange
+ var count = Fixture.Create();
+ var document = Fixture.Create();
+ var partitionKey = Fixture.Create();
+ var token = new CancellationToken(true);
+
+ var collection = MockOf>();
+ collection
+ .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny()))
+ .Returns(new DeleteResult.Acknowledged(count));
+
+ var dbContext = MockOf();
+ dbContext
+ .Setup(x => x.GetCollection(It.IsAny()))
+ .Returns(Fixture.Create>());
+
+ Expression> filter = d => d.Id == document.Id;
+
+ // Act
+ var result = Sut.DeleteOne(filter, partitionKey, token);
+
+ // Assert
+ result.Should().Be(count);
+ collection.Verify(
+ x => x.DeleteOne(
+ It.Is