Skip to content

Commit 917e22f

Browse files
committed
Inspect the posted slack block during kudos approval.
1 parent 59ec115 commit 917e22f

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.objectcomputing.checkins.services;
2+
3+
import com.objectcomputing.checkins.notifications.social_media.SlackPoster;
4+
5+
import io.micronaut.context.annotation.Replaces;
6+
import io.micronaut.context.annotation.Requires;
7+
import io.micronaut.core.util.StringUtils;
8+
import io.micronaut.http.HttpResponse;
9+
import io.micronaut.http.HttpStatus;
10+
11+
import jakarta.inject.Singleton;
12+
13+
import java.util.List;
14+
import java.util.ArrayList;
15+
16+
@Singleton
17+
@Replaces(SlackPoster.class)
18+
@Requires(property = "replace.slackposter", value = StringUtils.TRUE)
19+
public class SlackPosterReplacement extends SlackPoster {
20+
public final List<String> posted = new ArrayList<>();
21+
22+
public void reset() {
23+
posted.clear();
24+
}
25+
26+
public HttpResponse post(String slackBlock) {
27+
posted.add(slackBlock);
28+
return HttpResponse.status(HttpStatus.OK);
29+
}
30+
}
31+

server/src/test/java/com/objectcomputing/checkins/services/kudos/KudosControllerTest.java

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
44
import com.objectcomputing.checkins.notifications.email.MailJetFactory;
55
import com.objectcomputing.checkins.services.MailJetFactoryReplacement;
6+
import com.objectcomputing.checkins.services.SlackPosterReplacement;
67
import com.objectcomputing.checkins.services.TestContainersSuite;
78
import com.objectcomputing.checkins.services.fixture.KudosFixture;
89
import com.objectcomputing.checkins.services.fixture.TeamFixture;
910
import com.objectcomputing.checkins.services.fixture.RoleFixture;
1011
import com.objectcomputing.checkins.services.kudos.kudos_recipient.KudosRecipient;
1112
import com.objectcomputing.checkins.services.kudos.kudos_recipient.KudosRecipientServicesImpl;
13+
import com.objectcomputing.checkins.services.memberprofile.MemberProfileUtils;
1214
import com.objectcomputing.checkins.services.memberprofile.MemberProfile;
1315
import com.objectcomputing.checkins.services.team.Team;
1416
import io.micronaut.core.type.Argument;
@@ -30,9 +32,16 @@
3032
import org.junit.jupiter.params.provider.CsvSource;
3133
import org.junit.jupiter.api.condition.DisabledInNativeImage;
3234

35+
import com.fasterxml.jackson.databind.ObjectMapper;
36+
import com.fasterxml.jackson.databind.node.JsonNodeType;
37+
import com.fasterxml.jackson.databind.JsonNode;
38+
import com.fasterxml.jackson.databind.node.ObjectNode;
39+
import com.fasterxml.jackson.core.JsonProcessingException;
40+
3341
import java.time.LocalDate;
3442
import java.util.Collections;
3543
import java.util.List;
44+
import java.util.Map;
3645
import java.util.Optional;
3746
import java.util.UUID;
3847

@@ -51,11 +60,15 @@
5160
// when attempting to post public Kudos to Slack.
5261
@DisabledInNativeImage
5362
@Property(name = "replace.mailjet.factory", value = StringUtils.TRUE)
63+
@Property(name = "replace.slackposter", value = StringUtils.TRUE)
5464
class KudosControllerTest extends TestContainersSuite implements KudosFixture, TeamFixture, RoleFixture {
5565
@Inject
5666
@Named(MailJetFactory.HTML_FORMAT)
5767
private MailJetFactoryReplacement.MockEmailSender emailSender;
5868

69+
@Inject
70+
private SlackPosterReplacement slackPoster;
71+
5972
@Inject
6073
@Client("/services/kudos")
6174
HttpClient httpClient;
@@ -93,6 +106,7 @@ void setUp() {
93106

94107
message = "Kudos!";
95108
emailSender.reset();
109+
slackPoster.reset();
96110
}
97111

98112
@ParameterizedTest
@@ -210,7 +224,7 @@ void testCreateKudosWithEmptyRecipientMembers() {
210224
}
211225

212226
@Test
213-
void testApproveKudos() {
227+
void testApproveKudos() throws JsonProcessingException {
214228
Kudos kudos = createPublicKudos(senderId);
215229
assertNull(kudos.getDateApproved());
216230
KudosRecipient recipient = createKudosRecipient(kudos.getId(), recipientMembers.getFirst().getId());
@@ -231,6 +245,52 @@ void testApproveKudos() {
231245
),
232246
emailSender.events.getFirst()
233247
);
248+
249+
// Check the posted slack block
250+
assertEquals(1, slackPoster.posted.size());
251+
ObjectMapper mapper = new ObjectMapper();
252+
JsonNode posted = mapper.readTree(slackPoster.posted.get(0));
253+
254+
assertEquals(JsonNodeType.OBJECT, posted.getNodeType());
255+
JsonNode blocks = posted.get("blocks");
256+
assertEquals(JsonNodeType.ARRAY, blocks.getNodeType());
257+
258+
var iter = blocks.elements();
259+
assertTrue(iter.hasNext());
260+
JsonNode block = iter.next();
261+
262+
assertEquals(JsonNodeType.OBJECT, block.getNodeType());
263+
JsonNode elements = block.get("elements");
264+
assertEquals(JsonNodeType.ARRAY, elements.getNodeType());
265+
266+
iter = elements.elements();
267+
assertTrue(iter.hasNext());
268+
JsonNode element = iter.next();
269+
270+
assertEquals(JsonNodeType.OBJECT, element.getNodeType());
271+
JsonNode innerElements = element.get("elements");
272+
assertEquals(JsonNodeType.ARRAY, innerElements.getNodeType());
273+
274+
iter = innerElements.elements();
275+
assertTrue(iter.hasNext());
276+
277+
// The real SlackPoster will look up user ids in Slack and use those in
278+
// the posted message. Failing the lookup, it will use @<full name>.
279+
String from = "@" + MemberProfileUtils.getFullName(sender);
280+
String to = "@" + MemberProfileUtils.getFullName(recipientMembers.get(0));
281+
boolean foundFrom = false;
282+
boolean foundTo = false;
283+
while(iter.hasNext()) {
284+
element = iter.next();
285+
assertEquals(JsonNodeType.OBJECT, element.getNodeType());
286+
String value = element.get("text").asText();
287+
if (value.equals(from)) {
288+
foundFrom = true;
289+
} else if (value.equals(to)) {
290+
foundTo = true;
291+
}
292+
}
293+
assertTrue(foundFrom && foundTo);
234294
}
235295

236296
@Test

0 commit comments

Comments
 (0)