Skip to content

Commit 9e71619

Browse files
committed
[ksqlDB.RestApi.Client]: enabled specifying of pseudocolumns using the Fluent API's model builder unit tests #96
1 parent f1083b0 commit 9e71619

File tree

3 files changed

+89
-1
lines changed

3 files changed

+89
-1
lines changed

Tests/ksqlDB.RestApi.Client.Tests/FluentAPI/Builders/ModelBuilderTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,9 +367,29 @@ public void AsStruct()
367367
var entityMetadata = ((IMetadataProvider)builder).GetEntities().FirstOrDefault(c => c.Type == typeof(Record));
368368
entityMetadata.Should().NotBeNull();
369369

370-
var metadata = entityMetadata!.FieldsMetadata.First(c => c.IsStruct && c.Path == "Headers");
370+
var metadata = entityMetadata!.FieldsMetadata.First(c => c is {Path: nameof(Record.Headers)});
371371
metadata.IsStruct.Should().BeTrue();
372372
}
373+
374+
[Test]
375+
public void AsPseudoColumn()
376+
{
377+
//Arrange
378+
379+
//Act
380+
var fieldTypeBuilder = builder.Entity<Record>()
381+
.Property(b => b.Headers)
382+
.AsPseudoColumn();
383+
384+
//Assert
385+
fieldTypeBuilder.Should().NotBeNull();
386+
387+
var entityMetadata = ((IMetadataProvider)builder).GetEntities().FirstOrDefault(c => c.Type == typeof(Record));
388+
entityMetadata.Should().NotBeNull();
389+
390+
var metadata = entityMetadata!.FieldsMetadata.First(c => c is {Path: nameof(Record.Headers)});
391+
metadata.IsPseudoColumn.Should().BeTrue();
392+
}
373393
}
374394

375395
internal record Payment

Tests/ksqlDB.RestApi.Client.Tests/FluentAPI/FieldTypeBuilderTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public void InitState()
3232

3333
fieldMetadata.HasHeaders.Should().BeFalse();
3434
fieldMetadata.IsStruct.Should().BeFalse();
35+
fieldMetadata.IsPseudoColumn.Should().BeFalse();
3536
fieldMetadata.ColumnName.Should().BeNull();
3637
}
3738

@@ -93,6 +94,19 @@ public void AsStruct()
9394
fieldMetadata.IsStruct.Should().BeTrue();
9495
}
9596

97+
[Test]
98+
public void AsPseudoColumn()
99+
{
100+
//Arrange
101+
102+
//Act
103+
var fieldTypeBuilder = builder.AsPseudoColumn();
104+
105+
//Assert
106+
fieldTypeBuilder.Should().NotBeNull();
107+
fieldMetadata.IsPseudoColumn.Should().BeTrue();
108+
}
109+
96110
[Test]
97111
public void HasColumnName()
98112
{

Tests/ksqlDB.RestApi.Client.Tests/KSql/RestApi/Parsers/IdentifierUtilTests.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
using System.Linq.Expressions;
2+
using ksqlDb.RestApi.Client.FluentAPI.Builders;
13
using ksqlDB.RestApi.Client.KSql.RestApi.Enums;
24
using ksqlDb.RestApi.Client.KSql.RestApi.Parsers;
35
using NUnit.Framework;
6+
using FluentAssertions;
47

58
namespace ksqlDb.RestApi.Client.Tests.KSql.RestApi.Parsers
69
{
@@ -31,5 +34,56 @@ public class IdentifierUtilTests
3134
[TestCase(SystemColumns.WINDOWEND, IdentifierEscaping.Always, ExpectedResult = $"`{SystemColumns.WINDOWEND}`")]
3235
public string ShouldBeFormatted(string identifier, IdentifierEscaping escaping) =>
3336
IdentifierUtil.Format(identifier, escaping);
37+
38+
private ModelBuilder builder = null!;
39+
40+
[SetUp]
41+
public void TestInitialize()
42+
{
43+
builder = new();
44+
}
45+
46+
private class Record
47+
{
48+
public long RowTime { get; }
49+
}
50+
51+
[TestCase(IdentifierEscaping.Keywords)]
52+
[TestCase(IdentifierEscaping.Always)]
53+
public void Format_MemberExpression_AsPseudoColumn(IdentifierEscaping escaping)
54+
{
55+
//Arrange
56+
builder.Entity<Record>()
57+
.Property(c => c.RowTime)
58+
.AsPseudoColumn();
59+
60+
Expression<Func<Record, long>> expression = c => c.RowTime;
61+
var memberExpression = (MemberExpression) expression.Body;
62+
63+
//Act
64+
var formattedIdentifier = IdentifierUtil.Format(memberExpression, escaping, builder);
65+
66+
//Assert
67+
formattedIdentifier.Should().Be(nameof(Record.RowTime));
68+
}
69+
70+
[TestCase(IdentifierEscaping.Keywords)]
71+
[TestCase(IdentifierEscaping.Always)]
72+
public void Format_MemberInfo_AsPseudoColumn(IdentifierEscaping escaping)
73+
{
74+
//Arrange
75+
builder.Entity<Record>()
76+
.Property(c => c.RowTime)
77+
.AsPseudoColumn();
78+
79+
Expression<Func<Record, long>> expression = c => c.RowTime;
80+
var memberInfo = ((MemberExpression)expression.Body).Member;
81+
82+
//Act
83+
var formattedIdentifier = IdentifierUtil.Format(memberInfo, escaping, builder);
84+
85+
//Assert
86+
formattedIdentifier.Should().Be(nameof(Record.RowTime));
87+
}
3488
}
3589
}

0 commit comments

Comments
 (0)