Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
some generics
  • Loading branch information
Maya-Painter committed Oct 11, 2023
commit 2d28efc1886d4db59efee269ff93aad671facf88
Original file line number Diff line number Diff line change
Expand Up @@ -326,13 +326,14 @@ public static Func<bool, IQueryable<T>> GenerateTestCosmosData<T>(Func<Random, T
}

/// <summary>
/// Generate test data for serializer LINQ tests, which require a non-random payload to be serialized.
/// Generate a non-random payload for serializer LINQ tests.
/// </summary>
/// <typeparam name="T">the object type</typeparam>
/// <param name="func">the lamda to create an instance of test data</param>
/// <param name="count">number of test data to be created</param>
/// <param name="container">the target container</param>
/// <returns>a lambda that takes a boolean which indicate where the query should run against CosmosDB or against original data, and return a query results as IQueryable</returns>
/// <param name="camelCaseSerialization">if theCosmosLinqSerializerOption of camelCaseSerialization should be applied</param>
/// <returns>a lambda that takes a boolean which indicate where the query should run against CosmosDB or against original data, and return a query results as IQueryable. Also the serialized payload.</returns>
public static (Func<bool, IQueryable<T>>, List<T>) GenerateTestCosmosDataSerializationTest<T>(Func<int, bool, T> func, int count, Container container, bool camelCaseSerialization = false)
{
List<T> data = new List<T>();
Expand Down Expand Up @@ -361,7 +362,6 @@ public static (Func<bool, IQueryable<T>>, List<T>) GenerateTestCosmosDataSeriali

IQueryable<T> getQuery(bool useQuery) => useQuery ? query : data.AsQueryable();

//todo mayapainter: finish documentation
return (getQuery, insertedData);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ namespace Microsoft.Azure.Cosmos.Services.Management.Tests.LinqProviderTests
using System.IO;
using System.Linq;
using System.Linq.Dynamic;
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Xml.Schema;
using BaselineTest;
using global::Azure.Core.Serialization;
using Microsoft.Azure.Cosmos.SDK.EmulatorTests;
Expand Down Expand Up @@ -64,23 +66,10 @@ public async Task TestCleanup()
[TestMethod]
public void TestMemberInitializerDotNet()
{
static DataObjectDotNet createDataObj(int index, bool camelCase)
{
DataObjectDotNet obj = new DataObjectDotNet
{
NumericField = index,
StringField = index.ToString(),
id = $"{index}-{camelCase}",
Pk = "Test"
};
return obj;
}

(Func<bool, IQueryable<DataObjectDotNet>> getQueryCamelCase, List<DataObjectDotNet> insertedDataListCamelCase) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: true);
(Func<bool, IQueryable<DataObjectDotNet>> getQueryDefault, List<DataObjectDotNet> insertedDataListDefault) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: false);

List<DataObjectDotNet> insertedDataList = insertedDataListCamelCase.Concat(insertedDataListDefault).ToList();
string insertedData = JsonConvert.SerializeObject(insertedDataList.Select(item => item.ToString()), new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });
Func<bool, IQueryable<DataObjectDotNet>> getQueryCamelCase;
Func<bool, IQueryable<DataObjectDotNet>> getQueryDefault;
string insertedData;
(getQueryCamelCase, getQueryDefault, insertedData) = this.InsertDataAndGetQueryable<DataObjectDotNet>();

List<LinqTestInput> inputs = new List<LinqTestInput>();
foreach (bool useCamelCaseSerializer in new bool[] { true, false })
Expand All @@ -106,23 +95,10 @@ static DataObjectDotNet createDataObj(int index, bool camelCase)
[TestMethod]
public void TestMemberInitializerNewtonsoft()
{
static DataObjectNewtonsoft createDataObj(int index, bool camelCase)
{
DataObjectNewtonsoft obj = new DataObjectNewtonsoft
{
NumericField = index,
StringField = index.ToString(),
id = $"{index}-{camelCase}",
Pk = "Test"
};
return obj;
}

(Func<bool, IQueryable<DataObjectNewtonsoft>> getQueryCamelCase, List<DataObjectNewtonsoft> insertedDataListCamelCase) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: true);
(Func<bool, IQueryable<DataObjectNewtonsoft>> getQueryDefault, List<DataObjectNewtonsoft> insertedDataListDefault) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: false);

List<DataObjectNewtonsoft> insertedDataList = insertedDataListCamelCase.Concat(insertedDataListDefault).ToList();
string insertedData = JsonConvert.SerializeObject(insertedDataList.Select(item => item.ToString()), new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });
Func<bool, IQueryable<DataObjectNewtonsoft>> getQueryCamelCase;
Func<bool, IQueryable<DataObjectNewtonsoft>> getQueryDefault;
string insertedData;
(getQueryCamelCase, getQueryDefault, insertedData) = this.InsertDataAndGetQueryable<DataObjectNewtonsoft>();

List<LinqTestInput> inputs = new List<LinqTestInput>();
foreach (bool useCamelCaseSerializer in new bool[] { true, false })
Expand All @@ -148,23 +124,10 @@ static DataObjectNewtonsoft createDataObj(int index, bool camelCase)
[TestMethod]
public void TestMemberInitializerMultiSerializer()
{
static DataObjectMultiSerializer createDataObj(int index, bool camelCase)
{
DataObjectMultiSerializer obj = new DataObjectMultiSerializer
{
NumericField = index,
StringField = index.ToString(),
id = $"{index}-{camelCase}",
Pk = "Test"
};
return obj;
}

(Func<bool, IQueryable<DataObjectMultiSerializer>> getQueryCamelCase, List<DataObjectMultiSerializer> insertedDataListCamelCase) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: true);
(Func<bool, IQueryable<DataObjectMultiSerializer>> getQueryDefault, List<DataObjectMultiSerializer> insertedDataListDefault) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: false);

List<DataObjectMultiSerializer> insertedDataList = insertedDataListCamelCase.Concat(insertedDataListDefault).ToList();
string insertedData = JsonConvert.SerializeObject(insertedDataList.Select(item => item.ToString()), new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });
Func<bool, IQueryable<DataObjectMultiSerializer>> getQueryCamelCase;
Func<bool, IQueryable<DataObjectMultiSerializer>> getQueryDefault;
string insertedData;
(getQueryCamelCase, getQueryDefault, insertedData) = this.InsertDataAndGetQueryable<DataObjectMultiSerializer>();

List<LinqTestInput> inputs = new List<LinqTestInput>();
foreach (bool useCamelCaseSerializer in new bool[] { true, false })
Expand All @@ -187,6 +150,26 @@ static DataObjectMultiSerializer createDataObj(int index, bool camelCase)
this.ExecuteTestSuite(inputs);
}

private (Func<bool, IQueryable<T>>, Func<bool, IQueryable<T>>, string) InsertDataAndGetQueryable<T>() where T : LinqTestObject
{
static T createDataObj(int index, bool camelCase)
{
T obj = (T)Activator.CreateInstance(typeof(T), new object[]
{
index, index.ToString(), $"{index}-{camelCase}", "Test"
});
return obj;
}

(Func<bool, IQueryable<T>> getQueryCamelCase, List<T> insertedDataListCamelCase) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: true);
(Func<bool, IQueryable<T>> getQueryDefault, List<T> insertedDataListDefault) = LinqTestsCommon.GenerateTestCosmosDataSerializationTest(createDataObj, RecordCount, TestContainer, camelCaseSerialization: false);

List<T> insertedDataList = insertedDataListCamelCase.Concat(insertedDataListDefault).ToList();
string insertedData = JsonConvert.SerializeObject(insertedDataList.Select(item => item.ToString()), new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });

return (getQueryCamelCase, getQueryDefault, insertedData);
}

public override LinqTestOutput ExecuteTest(LinqTestInput input)
{
return LinqTestsCommon.ExecuteTest(input, includeResults: true);
Expand Down Expand Up @@ -244,6 +227,16 @@ internal class DataObjectDotNet : LinqTestObject

[JsonPropertyName("Pk")]
public string Pk { get; set; }

public DataObjectDotNet() { }

public DataObjectDotNet(double numericFeild, string stringField, string id, string pk)
{
this.NumericField = numericFeild;
this.StringField = stringField;
this.id = id;
this.Pk = pk;
}
}

internal class DataObjectNewtonsoft : LinqTestObject
Expand All @@ -259,6 +252,16 @@ internal class DataObjectNewtonsoft : LinqTestObject

[Newtonsoft.Json.JsonProperty(PropertyName = "Pk")]
public string Pk { get; set; }

public DataObjectNewtonsoft() { }

public DataObjectNewtonsoft(double numericFeild, string stringField, string id, string pk)
{
this.NumericField = numericFeild;
this.StringField = stringField;
this.id = id;
this.Pk = pk;
}
}

internal class DataObjectMultiSerializer : LinqTestObject
Expand All @@ -278,6 +281,16 @@ internal class DataObjectMultiSerializer : LinqTestObject
[Newtonsoft.Json.JsonProperty(PropertyName = "Pk")]
[JsonPropertyName("Pk")]
public string Pk { get; set; }

public DataObjectMultiSerializer() { }

public DataObjectMultiSerializer(double numericFeild, string stringField, string id, string pk)
{
this.NumericField = numericFeild;
this.StringField = stringField;
this.id = id;
this.Pk = pk;
}
}
}
}