fix: 修复月卡无法编辑次数的问题

This commit is contained in:
richarjiang
2026-09-07 18:10:39 +08:00
parent 86ad9ee64f
commit 87d946adb5
17 changed files with 564 additions and 91 deletions

View File

@@ -224,7 +224,7 @@ describe('MembershipService', () => {
expect(result.remainingTimes).toBe(0)
})
it('should not change times for a DURATION card', async () => {
it('should leave an unlimited DURATION card unchanged', async () => {
mockPrismaService.membership.findUnique.mockResolvedValue(mockDurationMembership)
const result = await service.deductMembership('mem-duration-001')
@@ -234,6 +234,27 @@ describe('MembershipService', () => {
expect(result.status).toBe(MembershipStatus.ACTIVE)
})
it('should decrement remainingTimes for a count-limited DURATION card', async () => {
const membership = {
...mockDurationMembership,
remainingTimes: 5,
totalTimes: 10,
}
mockPrismaService.membership.findUnique.mockResolvedValue(membership)
mockPrismaService.membership.update.mockResolvedValue({
...membership,
remainingTimes: 4,
})
await service.deductMembership('mem-duration-001')
expect(mockPrismaService.membership.update).toHaveBeenCalledWith(
expect.objectContaining({
data: { remainingTimes: 4, status: MembershipStatus.ACTIVE },
}),
)
})
it('should throw NotFoundException when membership does not exist', async () => {
mockPrismaService.membership.findUnique.mockResolvedValue(null)
@@ -298,6 +319,39 @@ describe('MembershipService', () => {
expect(result.remainingTimes).toBe(4)
})
it('should leave an unlimited DURATION card unchanged', async () => {
mockPrismaService.membership.findUnique.mockResolvedValue(mockDurationMembership)
const result = await service.restoreMembership('mem-duration-001')
expect(mockPrismaService.membership.update).not.toHaveBeenCalled()
expect(result.remainingTimes).toBeNull()
expect(result.status).toBe(MembershipStatus.ACTIVE)
})
it('should restore a count-limited DURATION card from USED_UP', async () => {
const membership = {
...mockDurationMembership,
remainingTimes: 0,
totalTimes: 10,
status: MembershipStatus.USED_UP,
}
mockPrismaService.membership.findUnique.mockResolvedValue(membership)
mockPrismaService.membership.update.mockResolvedValue({
...membership,
remainingTimes: 1,
status: MembershipStatus.ACTIVE,
})
await service.restoreMembership('mem-duration-001')
expect(mockPrismaService.membership.update).toHaveBeenCalledWith(
expect.objectContaining({
data: { remainingTimes: 1, status: MembershipStatus.ACTIVE },
}),
)
})
it('should throw NotFoundException when membership does not exist', async () => {
mockPrismaService.membership.findUnique.mockResolvedValue(null)