Skip to content

Commit f84a845

Browse files
Scenario 2 test
1 parent 0e7e1f4 commit f84a845

File tree

1 file changed

+161
-172
lines changed

1 file changed

+161
-172
lines changed
Lines changed: 161 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,162 @@
1-
// namespace ServiceControl.AcceptanceTests.Recoverability.ExternalIntegration
2-
// {
3-
// using System.Collections.Generic;
4-
// using System.Linq;
5-
// using System.Threading.Tasks;
6-
// using AcceptanceTesting;
7-
// using AcceptanceTesting.EndpointTemplates;
8-
// using Contracts;
9-
// using NServiceBus;
10-
// using NServiceBus.AcceptanceTesting;
11-
// using NUnit.Framework;
12-
// using ServiceControl.MessageFailures;
13-
// using ServiceControl.MessageFailures.Api;
14-
// using JsonSerializer = System.Text.Json.JsonSerializer;
15-
// using ServiceBus.Management.Infrastructure.Settings;
16-
//
17-
// class When_a_failed_edit_is_resolved_by_retry : ExternalIntegrationAcceptanceTest
18-
// {
19-
// [Test]
20-
// public async Task Should_publish_notification()
21-
// {
22-
// var context = await Define<EditMessageResolutionContext>()
23-
// .WithEndpoint<MessageReceiver>(b => b.When(async (bus, c) =>
24-
// {
25-
// await bus.Subscribe<MessageFailureResolvedByRetry>();
26-
// }).When(c => c.SendLocal(new EditResolutionMessage())).DoNotFailOnErrorMessages())
27-
// .Done(async ctx =>
28-
// {
29-
// if (!ctx.OriginalMessageHandled)
30-
// {
31-
// return false;
32-
// }
33-
//
34-
// if (!ctx.EditedAndRetriedMessage)
35-
// {
36-
// var allFailedMessages =
37-
// await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
38-
// if (!allFailedMessages.HasResult)
39-
// {
40-
// return false;
41-
// }
42-
//
43-
// if (allFailedMessages.Item.Count != 1)
44-
// {
45-
// return false;
46-
// }
47-
//
48-
// ctx.OriginalMessageFailureId = allFailedMessages.Item.First().Id;
49-
// ctx.EditedAndRetriedMessage = true;
50-
//
51-
// string editedMessage = JsonSerializer.Serialize(new EditResolutionMessage
52-
// {
53-
// HasBeenEdited = true
54-
// });
55-
//
56-
// SingleResult<FailedMessage> failedMessage =
57-
// await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}");
58-
//
59-
// var editModel = new EditMessageModel
60-
// {
61-
// MessageBody = editedMessage,
62-
// MessageHeaders = failedMessage.Item.ProcessingAttempts.Last().Headers
63-
// };
64-
// await this.Post($"/api/edit/{ctx.OriginalMessageFailureId}", editModel);
65-
// return false;
66-
// }
67-
//
68-
// if (!ctx.RetriedMessage)
69-
// {
70-
// var allFailedMessagesAfterEdit =
71-
// await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
72-
// if (!allFailedMessagesAfterEdit.HasResult)
73-
// {
74-
// return false;
75-
// }
76-
//
77-
// if (allFailedMessagesAfterEdit.Item.Count != 1)
78-
// {
79-
// return false;
80-
// }
81-
//
82-
// ctx.EditedMessageFailureId = allFailedMessagesAfterEdit.Item.First().Id;
83-
// ctx.RetriedMessage = true;
84-
//
85-
// await this.Post<object>($"/api/errors/{ctx.EditedMessageFailureId}/retry");
86-
// return false;
87-
// }
88-
//
89-
// if (!ctx.RetriedMessageHandled)
90-
// {
91-
// return false;
92-
// }
93-
//
94-
// if (!ctx.MessageResolved)
95-
// {
96-
// return false;
97-
// }
98-
//
99-
// return true;
100-
// }).Run();
101-
//
102-
// Assert.That(context.ResolvedMessageId, Is.EqualTo(context.OriginalMessageFailureId));
103-
// }
104-
//
105-
//
106-
// public class EditMessageResolutionContext : ScenarioContext
107-
// {
108-
// public bool OriginalMessageHandled { get; set; }
109-
// public bool EditedMessage { get; set; }
110-
// public string OriginalMessageFailureId { get; set; }
111-
// public bool EditedMessageHandled { get; set; }
112-
// public string ResolvedMessageId { get; set; }
113-
// public bool MessageResolved { get; set; }
114-
// public bool EditedAndRetriedMessgaeHandled { get; set; }
115-
// public bool RetriedMessageHandled { get; set; }
116-
// public string EditedMessageFailureId { get; set; }
117-
// public bool EditedAndRetriedMessage { get; set; }
118-
// public bool RetriedMessage { get; set; }
119-
// }
120-
//
121-
// public class MessageReceiver : EndpointConfigurationBuilder
122-
// {
123-
// public MessageReceiver() =>
124-
// EndpointSetup<DefaultServerWithoutAudit>(c =>
125-
// {
126-
// var routing = c.ConfigureRouting();
127-
// routing.RouteToEndpoint(typeof(FailedMessagesArchived).Assembly,
128-
// Settings.DEFAULT_INSTANCE_NAME);
129-
// },
130-
// publisherMetadata =>
131-
// {
132-
// publisherMetadata.RegisterPublisherFor<FailedMessagesArchived>(Settings.DEFAULT_INSTANCE_NAME);
133-
// });
134-
//
135-
//
136-
// public class EditMessageResolutionHandler(EditMessageResolutionContext testContext)
137-
// : IHandleMessages<EditResolutionMessage>, IHandleMessages<MessageFailureResolvedByRetry>
138-
// {
139-
// public Task Handle(EditResolutionMessage message, IMessageHandlerContext context)
140-
// {
141-
// if (!message.HasBeenEdited)
142-
// {
143-
// testContext.OriginalMessageHandled = true;
144-
// throw new SimulatedException();
145-
// }
146-
//
147-
// if (!testContext.RetriedMessage)
148-
// {
149-
// testContext.EditedAndRetriedMessgaeHandled = true;
150-
// throw new SimulatedException();
151-
// }
152-
//
153-
//
154-
// testContext.RetriedMessageHandled = true;
155-
// return Task.CompletedTask;
156-
// }
157-
//
158-
// public Task Handle(MessageFailureResolvedByRetry message, IMessageHandlerContext context)
159-
// {
160-
// testContext.ResolvedMessageId = message.FailedMessageId;
161-
// testContext.MessageResolved = true;
162-
// return Task.CompletedTask;
163-
// }
164-
// }
165-
// }
166-
//
167-
// public class EditResolutionMessage : IMessage
168-
// {
169-
// public bool HasBeenEdited { get; init; }
170-
// }
171-
// }
172-
// }
1+
namespace ServiceControl.AcceptanceTests.Recoverability.ExternalIntegration
2+
{
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Threading.Tasks;
6+
using AcceptanceTesting;
7+
using AcceptanceTesting.EndpointTemplates;
8+
using Contracts;
9+
using NServiceBus;
10+
using NServiceBus.AcceptanceTesting;
11+
using NUnit.Framework;
12+
using ServiceControl.MessageFailures;
13+
using ServiceControl.MessageFailures.Api;
14+
using JsonSerializer = System.Text.Json.JsonSerializer;
15+
16+
class When_a_failed_edit_is_resolved_by_retry : ExternalIntegrationAcceptanceTest
17+
{
18+
[Test]
19+
public async Task Should_publish_notification()
20+
{
21+
var context = await Define<EditMessageResolutionContext>()
22+
.WithEndpoint<MessageReceiver>(b => b.When(async (bus, c) =>
23+
{
24+
await bus.Subscribe<MessageFailureResolvedByRetry>();
25+
}).When(c => c.SendLocal(new EditResolutionMessage())).DoNotFailOnErrorMessages())
26+
.Done(async ctx =>
27+
{
28+
if (!ctx.OriginalMessageHandled)
29+
{
30+
return false;
31+
}
32+
33+
if (!ctx.EditedAndRetriedMessage)
34+
{
35+
var allFailedMessages =
36+
await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
37+
if (!allFailedMessages.HasResult)
38+
{
39+
return false;
40+
}
41+
42+
if (allFailedMessages.Item.Count != 1)
43+
{
44+
return false;
45+
}
46+
47+
ctx.OriginalMessageFailureId = allFailedMessages.Item.First().Id;
48+
ctx.EditedAndRetriedMessage = true;
49+
50+
string editedMessage = JsonSerializer.Serialize(new EditResolutionMessage
51+
{
52+
HasBeenEdited = true
53+
});
54+
55+
SingleResult<FailedMessage> failedMessage =
56+
await this.TryGet<FailedMessage>($"/api/errors/{ctx.OriginalMessageFailureId}");
57+
58+
var editModel = new EditMessageModel
59+
{
60+
MessageBody = editedMessage,
61+
MessageHeaders = failedMessage.Item.ProcessingAttempts.Last().Headers
62+
};
63+
await this.Post($"/api/edit/{ctx.OriginalMessageFailureId}", editModel);
64+
return false;
65+
}
66+
67+
if (!ctx.RetriedMessage)
68+
{
69+
var allFailedMessagesAfterEdit =
70+
await this.TryGet<IList<FailedMessageView>>($"/api/errors/?status=unresolved");
71+
if (!allFailedMessagesAfterEdit.HasResult)
72+
{
73+
return false;
74+
}
75+
76+
if (allFailedMessagesAfterEdit.Item.Count != 1)
77+
{
78+
return false;
79+
}
80+
81+
ctx.EditedMessageFailureId = allFailedMessagesAfterEdit.Item.First().Id;
82+
ctx.RetriedMessage = true;
83+
84+
await this.Post<object>($"/api/errors/{ctx.EditedMessageFailureId}/retry");
85+
return false;
86+
}
87+
88+
if (!ctx.RetriedMessageHandled)
89+
{
90+
return false;
91+
}
92+
93+
if (!ctx.MessageResolved)
94+
{
95+
return false;
96+
}
97+
98+
return true;
99+
}).Run();
100+
101+
Assert.That(context.ResolvedMessageId, Is.EqualTo(context.OriginalMessageFailureId));
102+
}
103+
104+
105+
public class EditMessageResolutionContext : ScenarioContext
106+
{
107+
public bool OriginalMessageHandled { get; set; }
108+
public bool EditedMessage { get; set; }
109+
public string OriginalMessageFailureId { get; set; }
110+
public bool EditedMessageHandled { get; set; }
111+
public string ResolvedMessageId { get; set; }
112+
public bool MessageResolved { get; set; }
113+
public bool EditedAndRetriedMessgaeHandled { get; set; }
114+
public bool RetriedMessageHandled { get; set; }
115+
public string EditedMessageFailureId { get; set; }
116+
public bool EditedAndRetriedMessage { get; set; }
117+
public bool RetriedMessage { get; set; }
118+
}
119+
120+
public class MessageReceiver : EndpointConfigurationBuilder
121+
{
122+
public MessageReceiver() => EndpointSetup<DefaultServerWithoutAudit>(c => c.NoRetries());
123+
124+
125+
public class EditMessageResolutionHandler(EditMessageResolutionContext testContext)
126+
: IHandleMessages<EditResolutionMessage>, IHandleMessages<MessageFailureResolvedByRetry>
127+
{
128+
public Task Handle(EditResolutionMessage message, IMessageHandlerContext context)
129+
{
130+
if (!message.HasBeenEdited)
131+
{
132+
testContext.OriginalMessageHandled = true;
133+
throw new SimulatedException();
134+
}
135+
136+
if (!testContext.RetriedMessage)
137+
{
138+
testContext.EditedAndRetriedMessgaeHandled = true;
139+
throw new SimulatedException();
140+
}
141+
142+
143+
testContext.RetriedMessageHandled = true;
144+
return Task.CompletedTask;
145+
}
146+
147+
public Task Handle(MessageFailureResolvedByRetry message, IMessageHandlerContext context)
148+
{
149+
testContext.ResolvedMessageId = message.FailedMessageId;
150+
testContext.MessageResolved = true;
151+
return Task.CompletedTask;
152+
}
153+
}
154+
}
155+
156+
public class EditResolutionMessage : IMessage
157+
{
158+
public bool HasBeenEdited { get; init; }
159+
}
160+
}
161+
}
173162

0 commit comments

Comments
 (0)