Skip to content

Commit 857d7a5

Browse files
authored
Merge pull request #2067 from bcgov/feature/ALCS-2319-remove-condition-card-on-archive
ALCS-2319 Remove card relationship on archive
2 parents a76fb28 + 4764972 commit 857d7a5

File tree

4 files changed

+37
-34
lines changed

4 files changed

+37
-34
lines changed

services/apps/alcs/src/alcs/application-decision/application-decision-condition/application-decision-condition.entity.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,5 @@ export class ApplicationDecisionCondition extends Base {
8686
@ManyToOne(() => ApplicationDecisionConditionCard, (conditionCard) => conditionCard.conditions, {
8787
nullable: true,
8888
})
89-
conditionCard: ApplicationDecisionConditionCard;
89+
conditionCard: ApplicationDecisionConditionCard | null;
9090
}

services/apps/alcs/src/alcs/card/card.module.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { CardType } from './card-type/card-type.entity';
1515
import { CardController } from './card.controller';
1616
import { Card } from './card.entity';
1717
import { CardService } from './card.service';
18+
import { ApplicationDecisionCondition } from '../application-decision/application-decision-condition/application-decision-condition.entity';
1819

1920
@Module({
2021
imports: [
@@ -25,18 +26,13 @@ import { CardService } from './card.service';
2526
CardSubtaskType,
2627
CardSubtask,
2728
CardHistory,
29+
ApplicationDecisionCondition,
2830
]),
2931
CodeModule,
3032
MessageModule,
3133
],
3234
controllers: [CardSubtaskController, CardController],
33-
providers: [
34-
CardStatusService,
35-
CardService,
36-
CardSubtaskService,
37-
CardSubscriber,
38-
CardProfile,
39-
],
35+
providers: [CardStatusService, CardService, CardSubtaskService, CardSubscriber, CardProfile],
4036
exports: [CardStatusService, CardService, CardSubtaskService],
4137
})
4238
export class CardModule {}

services/apps/alcs/src/alcs/card/card.service.spec.ts

+17-26
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ import { Test, TestingModule } from '@nestjs/testing';
77
import { getRepositoryToken } from '@nestjs/typeorm';
88
import * as config from 'config';
99
import { Repository } from 'typeorm';
10-
import {
11-
initBoardMockEntity,
12-
initCardMockEntity,
13-
} from '../../../test/mocks/mockEntities';
10+
import { initBoardMockEntity, initCardMockEntity } from '../../../test/mocks/mockEntities';
1411
import { User } from '../../user/user.entity';
1512
import { Board } from '../board/board.entity';
1613
import { MessageService } from '../message/message.service';
@@ -20,18 +17,21 @@ import { CARD_TYPE, CardType } from './card-type/card-type.entity';
2017
import { CardUpdateServiceDto } from './card.dto';
2118
import { Card } from './card.entity';
2219
import { CardService } from './card.service';
20+
import { ApplicationDecisionCondition } from '../application-decision/application-decision-condition/application-decision-condition.entity';
2321

2422
describe('CardService', () => {
2523
let service: CardService;
2624
let cardRepositoryMock: DeepMocked<Repository<Card>>;
2725
let cardTypeRepositoryMock: DeepMocked<Repository<CardType>>;
26+
let applicationConditionRepositoryMock: DeepMocked<Repository<ApplicationDecisionCondition>>;
2827
let mockCardEntity;
2928
let mockSubtaskService: DeepMocked<CardSubtaskService>;
3029
let mockNotificationService: DeepMocked<MessageService>;
3130

3231
beforeEach(async () => {
3332
cardRepositoryMock = createMock<Repository<Card>>();
3433
cardTypeRepositoryMock = createMock<Repository<CardType>>();
34+
applicationConditionRepositoryMock = createMock<Repository<ApplicationDecisionCondition>>();
3535
mockCardEntity = initCardMockEntity();
3636
mockSubtaskService = createMock();
3737
mockNotificationService = createMock();
@@ -52,6 +52,10 @@ describe('CardService', () => {
5252
provide: getRepositoryToken(CardType),
5353
useValue: cardTypeRepositoryMock,
5454
},
55+
{
56+
provide: getRepositoryToken(ApplicationDecisionCondition),
57+
useValue: applicationConditionRepositoryMock,
58+
},
5559
{
5660
provide: CONFIG_TOKEN,
5761
useValue: config,
@@ -71,6 +75,8 @@ describe('CardService', () => {
7175

7276
cardRepositoryMock.findOne.mockResolvedValue(mockCardEntity);
7377
cardRepositoryMock.save.mockResolvedValue(mockCardEntity);
78+
applicationConditionRepositoryMock.save.mockResolvedValue(new ApplicationDecisionCondition());
79+
applicationConditionRepositoryMock.find.mockResolvedValue([new ApplicationDecisionCondition()]);
7480
cardTypeRepositoryMock = module.get(getRepositoryToken(CardType));
7581
});
7682

@@ -89,11 +95,7 @@ describe('CardService', () => {
8995
boardUuid: mockCardEntity.boardUuid,
9096
};
9197

92-
const result = await service.update(
93-
new User(),
94-
mockCardEntity.uuid,
95-
payload,
96-
);
98+
const result = await service.update(new User(), mockCardEntity.uuid, payload);
9799
expect(result).toStrictEqual(mockCardEntity);
98100
expect(cardRepositoryMock.save).toHaveBeenCalledTimes(1);
99101
expect(cardRepositoryMock.save).toHaveBeenCalledWith(mockCardEntity);
@@ -108,12 +110,8 @@ describe('CardService', () => {
108110

109111
cardRepositoryMock.findOne.mockResolvedValue(null);
110112

111-
await expect(
112-
service.update(new User(), mockCardEntity.uuid, payload),
113-
).rejects.toMatchObject(
114-
new ServiceValidationException(
115-
`Card for with ${mockCardEntity.uuid} not found`,
116-
),
113+
await expect(service.update(new User(), mockCardEntity.uuid, payload)).rejects.toMatchObject(
114+
new ServiceValidationException(`Card for with ${mockCardEntity.uuid} not found`),
117115
);
118116
expect(cardRepositoryMock.save).toBeCalledTimes(0);
119117
});
@@ -145,9 +143,7 @@ describe('CardService', () => {
145143
cardTypeRepositoryMock.findOne.mockResolvedValue(null);
146144

147145
await expect(service.create(fakeType, board)).rejects.toMatchObject(
148-
new ServiceValidationException(
149-
`Provided type does not exist ${fakeType}`,
150-
),
146+
new ServiceValidationException(`Provided type does not exist ${fakeType}`),
151147
);
152148

153149
expect(cardRepositoryMock.save).toBeCalledTimes(0);
@@ -219,15 +215,10 @@ describe('CardService', () => {
219215

220216
expect(mockNotificationService.create).toHaveBeenCalledTimes(1);
221217

222-
const createNotificationServiceDto =
223-
mockNotificationService.create.mock.calls[0][0];
218+
const createNotificationServiceDto = mockNotificationService.create.mock.calls[0][0];
224219
expect(createNotificationServiceDto.actor).toStrictEqual(fakeAuthor);
225-
expect(createNotificationServiceDto.receiverUuid).toStrictEqual(
226-
mockUserUuid,
227-
);
228-
expect(createNotificationServiceDto.title).toStrictEqual(
229-
"You've been assigned",
230-
);
220+
expect(createNotificationServiceDto.receiverUuid).toStrictEqual(mockUserUuid);
221+
expect(createNotificationServiceDto.title).toStrictEqual("You've been assigned");
231222
expect(createNotificationServiceDto.targetType).toStrictEqual('card');
232223
});
233224

services/apps/alcs/src/alcs/card/card.service.ts

+16
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { CardSubtaskService } from './card-subtask/card-subtask.service';
1313
import { CARD_TYPE, CardType } from './card-type/card-type.entity';
1414
import { CardDetailedDto, CardDto, CardUpdateServiceDto } from './card.dto';
1515
import { Card } from './card.entity';
16+
import { ApplicationDecisionCondition } from '../application-decision/application-decision-condition/application-decision-condition.entity';
1617

1718
@Injectable()
1819
export class CardService {
@@ -29,6 +30,8 @@ export class CardService {
2930
private cardRepository: Repository<Card>,
3031
@InjectRepository(CardType)
3132
private cardTypeRepository: Repository<CardType>,
33+
@InjectRepository(ApplicationDecisionCondition)
34+
private applicationConditionRepository: Repository<ApplicationDecisionCondition>,
3235
@Inject(CONFIG_TOKEN) private config: IConfig,
3336
private subtaskService: CardSubtaskService,
3437
private notificationService: MessageService,
@@ -191,6 +194,19 @@ export class CardService {
191194
const subtaskUuids = card.subtasks.map((subtask) => subtask.uuid);
192195
await this.subtaskService.deleteMany(subtaskUuids);
193196

197+
const conditions = await this.applicationConditionRepository.find({
198+
where: {
199+
conditionCard: {
200+
cardUuid: uuid,
201+
},
202+
},
203+
});
204+
205+
conditions.forEach((c) => {
206+
c.conditionCard = null;
207+
this.applicationConditionRepository.save(c);
208+
});
209+
194210
card.archived = true;
195211
await this.cardRepository.save(card);
196212
await this.cardRepository.softRemove(card);

0 commit comments

Comments
 (0)