Skip to content

Commit 3fa6e0d

Browse files
committed
Add some tests
1 parent 0dd8f30 commit 3fa6e0d

2 files changed

Lines changed: 138 additions & 0 deletions

File tree

Src/Couchbase.Linq.IntegrationTests/QueryTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,6 +1436,58 @@ public void DateTimeOffset_DateTrunc()
14361436
}
14371437
}
14381438

1439+
[Test]
1440+
public void DateTime_Date()
1441+
{
1442+
var context = new BucketContext(TestSetup.Bucket);
1443+
1444+
var beers = from beer in context.Query<Beer>()
1445+
where beer.Type == "beer"
1446+
select new {beer.Name, Updated = beer.Updated.Date};
1447+
1448+
foreach (var b in beers.Take(1))
1449+
{
1450+
Console.WriteLine("Beer {0} is in {1:d}", b.Name, b.Updated);
1451+
}
1452+
}
1453+
1454+
[Test]
1455+
public async Task DateTime_Date_UnixMillis()
1456+
{
1457+
var context = new BucketContext(TestSetup.Bucket);
1458+
1459+
var versionProvider = TestSetup.Cluster.ClusterServices.GetRequiredService<IClusterVersionProvider>();
1460+
var clusterVersion = await versionProvider.GetVersionAsync() ?? FeatureVersions.DefaultVersion;
1461+
if (clusterVersion.Version == new Version(5, 5, 0))
1462+
{
1463+
Assert.Ignore("Skipping temporarily due to bug in 5.5 Beta https://issues.couchbase.com/browse/MB-29357");
1464+
}
1465+
1466+
var beers = from beer in context.Query<Beer>()
1467+
where beer.Type == "beer" && N1QlFunctions.IsValued(beer.UpdatedUnixMillis)
1468+
select new { beer.Name, Updated = beer.UpdatedUnixMillis.Value.Date };
1469+
1470+
foreach (var b in beers.Take(1))
1471+
{
1472+
Console.WriteLine("Beer {0} is in {1:d}", b.Name, b.Updated);
1473+
}
1474+
}
1475+
1476+
[Test]
1477+
public void DateTimeOffset_Date()
1478+
{
1479+
var context = new BucketContext(TestSetup.Bucket);
1480+
1481+
var beers = from beer in context.Query<Beer>()
1482+
where beer.Type == "beer"
1483+
select new {beer.Name, Updated = beer.UpdatedOffset.Date};
1484+
1485+
foreach (var b in beers.Take(1))
1486+
{
1487+
Console.WriteLine("Beer {0} is in {1:d}", b.Name, b.Updated);
1488+
}
1489+
}
1490+
14391491
private async Task PrepareBeerDocuments()
14401492
{
14411493
var query = @"UPDATE `beer-sample` SET updatedUnixMillis = STR_TO_MILLIS(updated)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Linq.Expressions;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using Couchbase.Linq.QueryGeneration;
8+
using Couchbase.Linq.QueryGeneration.MethodCallTranslators;
9+
using Moq;
10+
using NUnit.Framework;
11+
using System.Reflection;
12+
using Couchbase.Core.IO.Serializers;
13+
14+
namespace Couchbase.Linq.UnitTests.QueryGeneration.MethodCallTranslators
15+
{
16+
class DateMethodCallTranslatorTests
17+
{
18+
#region Translate
19+
20+
[Test]
21+
public void Translate_DateTime_Date_RendersCorrectly()
22+
{
23+
// Arrange
24+
25+
var queryGenerationContext = new N1QlQueryGenerationContext
26+
{
27+
Serializer = new DefaultSerializer()
28+
};
29+
30+
var visitor = new Mock<N1QlExpressionTreeVisitor>(queryGenerationContext)
31+
{
32+
CallBase = true
33+
};
34+
35+
var dateTime = new DateTime(2024, 01, 02, 3, 45, 10, DateTimeKind.Utc);
36+
37+
var method = typeof(DateTime).GetProperty("Date").GetGetMethod();
38+
var expression = Expression.Call(Expression.Constant(dateTime), method);
39+
40+
var transformer = new DateMethodCallTranslator();
41+
42+
// Act
43+
44+
transformer.Translate(expression, visitor.Object);
45+
var result = visitor.Object.GetN1QlExpression();
46+
47+
// Assert
48+
49+
Assert.AreEqual("DATE_TRUNC_STR(\"2024-01-02T03:45:10Z\",\"day\")", result);
50+
}
51+
52+
[Test]
53+
public void Translate_DateTimeOffset_Date_RendersCorrectly()
54+
{
55+
// Arrange
56+
57+
var queryGenerationContext = new N1QlQueryGenerationContext
58+
{
59+
Serializer = new DefaultSerializer()
60+
};
61+
62+
var visitor = new Mock<N1QlExpressionTreeVisitor>(queryGenerationContext)
63+
{
64+
CallBase = true
65+
};
66+
67+
var dateTime = new DateTimeOffset(2024, 01, 02, 3, 45, 10, TimeSpan.Zero);
68+
69+
var method = typeof(DateTimeOffset).GetProperty("Date").GetGetMethod();
70+
var expression = Expression.Call(Expression.Constant(dateTime), method);
71+
72+
var transformer = new DateMethodCallTranslator();
73+
74+
// Act
75+
76+
transformer.Translate(expression, visitor.Object);
77+
var result = visitor.Object.GetN1QlExpression();
78+
79+
// Assert
80+
81+
Assert.AreEqual("DATE_TRUNC_STR(\"2024-01-02T03:45:10+00:00\",\"day\")", result);
82+
}
83+
84+
#endregion
85+
}
86+
}

0 commit comments

Comments
 (0)