Skip to content

Commit 6c5f9e7

Browse files
committed
Fixing some inconherent behavior in Firebase tests
1 parent fb9048e commit 6c5f9e7

8 files changed

Lines changed: 42 additions & 225 deletions

File tree

src/Deveel.Messaging.Connector.Firebase/Messaging/FirebaseChannelSchemas.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ public static class FirebaseChannelSchemas
4848
.AddContentType(MessageContentType.PlainText)
4949
.HandlesMessageEndpoint(EndpointType.DeviceId, e =>
5050
{
51-
e.CanSend = true;
52-
e.CanReceive = false; // Push notifications are send-only
51+
e.CanSend = false; // Push notifications are send-only
52+
e.CanReceive = true;
5353
e.IsRequired = true; // Device token is required for sending
5454
})
5555
.HandlesMessageEndpoint(EndpointType.Topic, e =>
5656
{
57-
e.CanSend = true;
58-
e.CanReceive = false; // Topic notifications are send-only
57+
e.CanSend = false; // Topic notifications are send-only
58+
e.CanReceive = true;
5959
e.IsRequired = false; // Alternative to device tokens
6060
})
6161
.AddAuthenticationConfiguration(new AuthenticationConfiguration(AuthenticationType.Certificate, "Firebase Service Account Authentication")

test/Deveel.Messaging.Connector.Firebase.XUnit/Messaging/FirebaseChannelSchemasTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ public void FirebasePush_HasCorrectEndpoints()
7575
// Assert
7676
var deviceEndpoint = schema.Endpoints.FirstOrDefault(e => e.Type == EndpointType.DeviceId);
7777
Assert.NotNull(deviceEndpoint);
78-
Assert.True(deviceEndpoint.CanSend);
79-
Assert.False(deviceEndpoint.CanReceive);
78+
Assert.True(deviceEndpoint.CanReceive);
79+
Assert.False(deviceEndpoint.CanSend);
8080
Assert.True(deviceEndpoint.IsRequired);
8181

8282
var topicEndpoint = schema.Endpoints.FirstOrDefault(e => e.Type == EndpointType.Topic);
8383
Assert.NotNull(topicEndpoint);
84-
Assert.True(topicEndpoint.CanSend);
85-
Assert.False(topicEndpoint.CanReceive);
84+
Assert.True(topicEndpoint.CanReceive);
85+
Assert.False(topicEndpoint.CanSend);
8686
Assert.False(topicEndpoint.IsRequired);
8787
}
8888

test/Deveel.Messaging.Connector.Firebase.XUnit/Messaging/FirebaseMessageBuildingTests.cs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,14 @@ public async Task SendMessageAsync_WithInvalidCustomDataJson_AddsAsStringField()
169169
message.With("CustomData", "invalid-json-{not-valid}");
170170

171171
// Act
172-
await connector.SendMessageAsync(message, CancellationToken.None);
172+
var result = await connector.SendMessageAsync(message, CancellationToken.None);
173173

174-
// Assert
175-
mockFirebaseService.Verify(x => x.SendAsync(
176-
It.Is<FirebaseAdmin.Messaging.Message>(m =>
177-
m.Data != null &&
178-
m.Data.ContainsKey("customData") &&
179-
m.Data["customData"] == "invalid-json-{not-valid}"
180-
),
181-
It.IsAny<bool>(),
182-
It.IsAny<CancellationToken>()
183-
), Times.Once);
174+
// Assert
175+
Assert.False(result.Successful);
176+
Assert.NotNull(result.Error);
177+
178+
var validationError = Assert.IsType<MessageValidationError>(result.Error);
179+
Assert.Equal(ConnectorErrorCodes.MessageValidationFailed, validationError.ErrorCode);
184180
}
185181

186182
#endregion
@@ -512,7 +508,7 @@ public async Task SendMessageAsync_WithDryRunDisabled_PassesFalseToFirebaseServi
512508
connectionSettings.SetParameter("DryRun", false);
513509

514510
// Create connector manually with custom settings
515-
var schema = FirebaseTestSchemas.TestFirebasePush;
511+
var schema = FirebaseChannelSchemas.FirebasePush;
516512
var connector = new FirebasePushConnector(schema, connectionSettings, mockFirebaseService.Object);
517513

518514
var result = await connector.InitializeAsync(CancellationToken.None);
@@ -538,7 +534,7 @@ public async Task SendMessageAsync_WithDryRunDisabled_PassesFalseToFirebaseServi
538534
private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFirebaseService firebaseService)
539535
{
540536
// Use test schema that has corrected endpoint validation
541-
var schema = FirebaseTestSchemas.TestFirebasePush;
537+
var schema = FirebaseChannelSchemas.FirebasePush;
542538
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
543539
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);
544540

test/Deveel.Messaging.Connector.Firebase.XUnit/Messaging/FirebasePushConnectorIntegrationTests.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public async Task FirebaseConnector_FullLifecycle_WorksEndToEnd()
3232
// Arrange
3333
var mockFirebaseService = CreateComprehensiveMockFirebaseService();
3434
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
35-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production schema
35+
var schema = FirebaseChannelSchemas.FirebasePush;
3636

3737
var connector = new FirebasePushConnector(schema, connectionSettings, mockFirebaseService.Object);
3838

@@ -77,9 +77,8 @@ public async Task FirebaseConnector_WithDifferentSchemas_BehavesCorrectly()
7777
// Test all different Firebase test schemas
7878
var schemas = new[]
7979
{
80-
FirebaseTestSchemas.TestSimplePush,
81-
FirebaseTestSchemas.TestFirebasePush
82-
// Skip TestBulkPush due to batch testing complexities with sealed classes
80+
FirebaseChannelSchemas.FirebasePush,
81+
FirebaseChannelSchemas.SimplePush
8382
};
8483

8584
foreach (var schema in schemas)
@@ -114,8 +113,8 @@ public async Task FirebaseConnector_WithAuthenticationFlow_HandlesServiceAccount
114113
var connectionSettings = new ConnectionSettings();
115114
connectionSettings.SetParameter("ProjectId", "auth-test-project");
116115
connectionSettings.SetParameter("ServiceAccountKey", FirebaseMockFactory.CreateTestServiceAccountKey());
117-
118-
var connector = new FirebasePushConnector(FirebaseTestSchemas.TestFirebasePush, connectionSettings, mockFirebaseService.Object);
116+
117+
var connector = new FirebasePushConnector(FirebaseChannelSchemas.FirebasePush, connectionSettings, mockFirebaseService.Object);
119118

120119
// Act
121120
var initResult = await connector.InitializeAsync(CancellationToken.None);
@@ -251,8 +250,8 @@ public async Task FirebaseConnector_DisposalAndShutdown_CleansUpProperly()
251250
// Arrange
252251
var mockFirebaseService = CreateDisposableMockFirebaseService();
253252
var connector = new FirebasePushConnector(
254-
FirebaseTestSchemas.TestFirebasePush, // Use test schema instead of production schema
255-
FirebaseMockFactory.CreateValidConnectionSettings(),
253+
FirebaseChannelSchemas.FirebasePush,
254+
FirebaseMockFactory.CreateValidConnectionSettings(),
256255
mockFirebaseService.Object);
257256

258257
await connector.InitializeAsync(CancellationToken.None);
@@ -276,7 +275,7 @@ await Assert.ThrowsAsync<InvalidOperationException>(() =>
276275
private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFirebaseService firebaseService)
277276
{
278277
// Use test schema that has corrected endpoint validation
279-
var schema = FirebaseTestSchemas.TestFirebasePush;
278+
var schema = FirebaseChannelSchemas.FirebasePush;
280279
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
281280
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);
282281

@@ -289,7 +288,7 @@ private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFireb
289288
private async Task<FirebasePushConnector> CreateInitializedBulkConnectorAsync(IFirebaseService firebaseService)
290289
{
291290
// Use test bulk schema that has corrected endpoint validation
292-
var schema = FirebaseTestSchemas.TestBulkPush;
291+
var schema = FirebaseChannelSchemas.BulkPush;
293292
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
294293
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);
295294

test/Deveel.Messaging.Connector.Firebase.XUnit/Messaging/FirebasePushConnectorMessagingTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public async Task SendBatchAsync_WithoutBulkCapability_ThrowsNotSupportedExcepti
163163
{
164164
// Arrange - Use TestSimplePush schema which explicitly removes BulkMessaging capability
165165
var mockFirebaseService = CreateMockFirebaseService();
166-
var schema = FirebaseTestSchemas.TestSimplePush; // This schema has BulkMessaging removed
166+
var schema = FirebaseChannelSchemas.SimplePush; // This schema has BulkMessaging removed
167167
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
168168
var connector = new FirebasePushConnector(schema, connectionSettings, mockFirebaseService.Object);
169169

@@ -319,7 +319,7 @@ public async Task SendMessageAsync_WithiOSSpecificProperties_ConfiguresApnsCorre
319319
private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFirebaseService firebaseService, bool enableBulkMessaging = false)
320320
{
321321
// Use test schemas that have corrected endpoint validation
322-
var schema = enableBulkMessaging ? FirebaseTestSchemas.TestBulkPush : FirebaseTestSchemas.TestFirebasePush;
322+
var schema = enableBulkMessaging ? FirebaseChannelSchemas.BulkPush : FirebaseChannelSchemas.FirebasePush;
323323
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
324324
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);
325325

test/Deveel.Messaging.Connector.Firebase.XUnit/Messaging/FirebasePushConnectorTests.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public void Constructor_WithLogger_StoresLogger()
7777
public async Task InitializeAsync_WithValidSettings_ReturnsSuccess()
7878
{
7979
// Arrange
80-
var schema = FirebaseTestSchemas.TestSimplePush; // Use test simple schema instead of production
80+
var schema = FirebaseChannelSchemas.SimplePush;
8181
var connectionSettings = FirebaseMockFactory.CreateMinimalConnectionSettings();
8282
var mockFirebaseService = FirebaseMockFactory.CreateMockFirebaseService();
8383
var connector = new FirebasePushConnector(schema, connectionSettings, mockFirebaseService.Object);
@@ -97,7 +97,7 @@ public async Task InitializeAsync_WithValidSettings_ReturnsSuccess()
9797
public async Task InitializeAsync_WithMissingProjectId_ReturnsFailure()
9898
{
9999
// Arrange
100-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production
100+
var schema = FirebaseChannelSchemas.FirebasePush;
101101
var connectionSettings = new ConnectionSettings();
102102
connectionSettings.SetParameter("ServiceAccountKey", FirebaseMockFactory.CreateTestServiceAccountKey());
103103
var connector = new FirebasePushConnector(schema, connectionSettings);
@@ -116,7 +116,7 @@ public async Task InitializeAsync_WithMissingProjectId_ReturnsFailure()
116116
public async Task InitializeAsync_WithMissingServiceAccountKey_ReturnsFailure()
117117
{
118118
// Arrange
119-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production
119+
var schema = FirebaseChannelSchemas.FirebasePush;
120120
var connectionSettings = new ConnectionSettings();
121121
connectionSettings.SetParameter("ProjectId", "test-project");
122122
var connector = new FirebasePushConnector(schema, connectionSettings);
@@ -138,7 +138,7 @@ public async Task InitializeAsync_WithMissingServiceAccountKey_ReturnsFailure()
138138
public async Task InitializeAsync_WithFirebaseServiceFailure_ReturnsFailure()
139139
{
140140
// Arrange
141-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production
141+
var schema = FirebaseChannelSchemas.FirebasePush;
142142
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
143143
var mockFirebaseService = FirebaseMockFactory.CreateFailingFirebaseService();
144144
var connector = new FirebasePushConnector(schema, connectionSettings, mockFirebaseService.Object);
@@ -170,7 +170,7 @@ public async Task TestConnectionAsync_WithValidConnection_ReturnsSuccess()
170170
public async Task TestConnectionAsync_WithInvalidConnection_ReturnsFailure()
171171
{
172172
// Arrange
173-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production
173+
var schema = FirebaseChannelSchemas.FirebasePush;
174174
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
175175
var mockFirebaseService = new Mock<IFirebaseService>();
176176
mockFirebaseService.SetupGet(x => x.IsInitialized).Returns(true);
@@ -282,7 +282,7 @@ public async Task GetHealthAsync_WithHealthyConnector_ReturnsHealthyStatus()
282282
public async Task GetHealthAsync_WithUnhealthyConnector_ReturnsUnhealthyStatus()
283283
{
284284
// Arrange
285-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production
285+
var schema = FirebaseChannelSchemas.FirebasePush;
286286
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
287287
var mockFirebaseService = new Mock<IFirebaseService>();
288288
mockFirebaseService.SetupGet(x => x.IsInitialized).Returns(false);
@@ -310,8 +310,8 @@ public void Schema_ValidatesDeviceIdEndpoint()
310310

311311
// Assert
312312
Assert.NotNull(deviceEndpoint);
313-
Assert.True(deviceEndpoint.CanSend);
314-
Assert.False(deviceEndpoint.CanReceive);
313+
Assert.True(deviceEndpoint.CanReceive);
314+
Assert.False(deviceEndpoint.CanSend);
315315
Assert.True(deviceEndpoint.IsRequired);
316316
}
317317

@@ -326,8 +326,8 @@ public void Schema_ValidatesTopicEndpoint()
326326

327327
// Assert
328328
Assert.NotNull(topicEndpoint);
329-
Assert.True(topicEndpoint.CanSend);
330-
Assert.False(topicEndpoint.CanReceive);
329+
Assert.True(topicEndpoint.CanReceive);
330+
Assert.False(topicEndpoint.CanSend);
331331
Assert.False(topicEndpoint.IsRequired);
332332
}
333333

@@ -406,7 +406,7 @@ public void RichPushSchema_IncludesRichFeatures()
406406
/// </summary>
407407
private async Task<FirebasePushConnector> CreateInitializedConnectorAsync()
408408
{
409-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production schema
409+
var schema = FirebaseChannelSchemas.FirebasePush;
410410
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
411411
var mockFirebaseService = FirebaseMockFactory.CreateMockFirebaseService();
412412

@@ -422,7 +422,7 @@ private async Task<FirebasePushConnector> CreateInitializedConnectorAsync()
422422
/// </summary>
423423
private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFirebaseService firebaseService)
424424
{
425-
var schema = FirebaseTestSchemas.TestFirebasePush; // Use test schema instead of production schema
425+
var schema = FirebaseChannelSchemas.FirebasePush;
426426
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
427427

428428
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);
@@ -437,7 +437,7 @@ private async Task<FirebasePushConnector> CreateInitializedConnectorAsync(IFireb
437437
/// </summary>
438438
private async Task<FirebasePushConnector> CreateInitializedBulkConnectorAsync(IFirebaseService firebaseService)
439439
{
440-
var schema = FirebaseTestSchemas.TestBulkPush; // Use test bulk schema instead of production schema
440+
var schema = FirebaseChannelSchemas.BulkPush;
441441
var connectionSettings = FirebaseMockFactory.CreateValidConnectionSettings();
442442

443443
var connector = new FirebasePushConnector(schema, connectionSettings, firebaseService);

0 commit comments

Comments
 (0)