Skip to content

Fix member repo tests - #102

Open
Arshadul-Monir wants to merge 4 commits into
mainfrom
fix-member-repo-tests
Open

Fix member repo tests#102
Arshadul-Monir wants to merge 4 commits into
mainfrom
fix-member-repo-tests

Conversation

@Arshadul-Monir

Copy link
Copy Markdown
Member

SQL files are better tested via integration testing. MemberSqlRepoTest is now being tested via SpringBootTest rather than being a unit test.

@Arshadul-Monir
Arshadul-Monir requested a review from a team September 7, 2026 18:13
@sonarqubecloud

sonarqubecloud Bot commented Sep 7, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

.collect(Collectors.joining("\nAND\n", "WHERE\n", "\n"));
return GET_MEMBERS_BY_FILTERS_SQL.formatted(whereClause);

JdbcClient.StatementSpec statement = jdbc.sql(sql.formatted(whereClause));
Comment on lines +114 to +138
void updateMember_updatesEveryField() {
final Member originalMember = member;
final Member updatedMember = Member.builder()
.id(originalMember.getId())
.firstName("Taylor")
.lastName("Reed")
.email("updated-" + originalMember.getEmail())
.linkedInUrl("https://linkedin.com/in/taylor")
.introduction("Updated introduction")
.referralSource("Patina event")
.active(false)
.matchPref("Mentor")
.industryPref("Finance")
.rolePref("Product Manager")
.topics("Leadership")
.extraNotes("Available on weekends")
.build();

final Member result = memberRepo.updateMember(updatedMember).orElseThrow();

assertMemberFields(result, updatedMember);
assertNotNull(result.getCreatedAt());
assertNotNull(result.getUpdatedAt());
member = memberRepo.updateMember(originalMember).orElseThrow();
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test pollution issue: The test mutates the shared member instance variable and attempts to restore it at line 137. If any assertion fails before line 137 (lines 134-136), the member will remain in its updated state, causing subsequent tests that depend on the original member data to fail.

Fix: Use @BeforeEach and @AfterEach instead of @BeforeAll and @AfterAll, or restore the member state in a try-finally block:

@Test
void updateMember_updatesEveryField() {
    final Member originalMember = member;
    final Member updatedMember = Member.builder()
            .id(originalMember.getId())
            // ... other fields
            .build();
    
    try {
        final Member result = memberRepo.updateMember(updatedMember).orElseThrow();
        assertMemberFields(result, updatedMember);
        assertNotNull(result.getCreatedAt());
        assertNotNull(result.getUpdatedAt());
    } finally {
        member = memberRepo.updateMember(originalMember).orElseThrow();
    }
}
Suggested change
void updateMember_updatesEveryField() {
final Member originalMember = member;
final Member updatedMember = Member.builder()
.id(originalMember.getId())
.firstName("Taylor")
.lastName("Reed")
.email("updated-" + originalMember.getEmail())
.linkedInUrl("https://linkedin.com/in/taylor")
.introduction("Updated introduction")
.referralSource("Patina event")
.active(false)
.matchPref("Mentor")
.industryPref("Finance")
.rolePref("Product Manager")
.topics("Leadership")
.extraNotes("Available on weekends")
.build();
final Member result = memberRepo.updateMember(updatedMember).orElseThrow();
assertMemberFields(result, updatedMember);
assertNotNull(result.getCreatedAt());
assertNotNull(result.getUpdatedAt());
member = memberRepo.updateMember(originalMember).orElseThrow();
}
void updateMember_updatesEveryField() {
final Member originalMember = member;
final Member updatedMember = Member.builder()
.id(originalMember.getId())
.firstName("Taylor")
.lastName("Reed")
.email("updated-" + originalMember.getEmail())
.linkedInUrl("https://linkedin.com/in/taylor")
.introduction("Updated introduction")
.referralSource("Patina event")
.active(false)
.matchPref("Mentor")
.industryPref("Finance")
.rolePref("Product Manager")
.topics("Leadership")
.extraNotes("Available on weekends")
.build();
try {
final Member result = memberRepo.updateMember(updatedMember).orElseThrow();
assertMemberFields(result, updatedMember);
assertNotNull(result.getCreatedAt());
assertNotNull(result.getUpdatedAt());
} finally {
member = memberRepo.updateMember(originalMember).orElseThrow();
}
}

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

void updateMember_updatesEveryField() {
final Member originalMember = member;
final Member updatedMember = Member.builder()
.id(originalMember.getId())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should have a test for only updating some fields (or only a single field)

public static final String GET_MEMBER_BY_ID_SQL = "SELECT * FROM members WHERE id = :id";
public static final String GET_MEMBER_BY_EMAIL_SQL = "SELECT * FROM members WHERE email = :email";

private static final RowMapper<Member> MEMBER_ROW_MAPPER = (rs, rowNum) -> parseResultSetToMember(rs);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we changing this part?


Optional<Member> getMemberByEmail(String email);

boolean deleteMemberById(UUID id);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again, we shouldn't be introducing methods that are solely used in tests (unless i missed something where it was used elsewhere)

@spiffyy99

Copy link
Copy Markdown

backend tests and sonarcloud failing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants