Skip to content

Commit fe8e1bc

Browse files
authored
Merge pull request #2384 from bcgov/feature/2359
Add create C&E file button to home page
2 parents bfd59f0 + 0120240 commit fe8e1bc

File tree

5 files changed

+102
-3
lines changed

5 files changed

+102
-3
lines changed

alcs-frontend/src/app/features/home/home.component.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
<div class="welcome-title">
33
<h1>Welcome {{ userProfile?.prettyName }} to ALCS</h1>
44
</div>
5+
<div class="actions">
6+
<button mat-flat-button color="primary" type="button" (click)="createComplianceAndEnforcementFile()">
7+
+ New C&E File
8+
</button>
9+
</div>
510
<div *ngIf="hasOtherRole">
611
<app-assigned></app-assigned>
712
</div>

alcs-frontend/src/app/features/home/home.component.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,9 @@
99
justify-content: center;
1010
align-items: center;
1111
}
12+
13+
.actions {
14+
display: flex;
15+
margin-bottom: 24px;
16+
justify-content: right;
17+
}

alcs-frontend/src/app/features/home/home.component.spec.ts

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@ import { BehaviorSubject } from 'rxjs';
66
import { AuthenticationService, ICurrentUser } from '../../services/authentication/authentication.service';
77
import { UserDto } from '../../services/user/user.dto';
88
import { UserService } from '../../services/user/user.service';
9-
109
import { HomeComponent } from './home.component';
10+
import { ComplianceAndEnforcementService } from '../../services/compliance-and-enforcement/compliance-and-enforcement.service';
11+
import { ToastService } from '../../services/toast/toast.service';
12+
import { Router } from '@angular/router';
1113

1214
describe('HomeComponent', () => {
1315
let component: HomeComponent;
1416
let fixture: ComponentFixture<HomeComponent>;
1517
let mockAuthService: DeepMocked<AuthenticationService>;
1618
let mockUserService: DeepMocked<UserService>;
19+
let mockComplianceAndEnforcementService: DeepMocked<ComplianceAndEnforcementService>;
20+
let mockToastService: DeepMocked<ToastService>;
21+
let mockRouter: DeepMocked<Router>;
1722

1823
beforeEach(async () => {
1924
mockAuthService = createMock();
@@ -27,6 +32,10 @@ describe('HomeComponent', () => {
2732
email: 'secret',
2833
});
2934

35+
mockComplianceAndEnforcementService = createMock();
36+
mockToastService = createMock();
37+
mockRouter = createMock();
38+
3039
await TestBed.configureTestingModule({
3140
declarations: [HomeComponent],
3241
imports: [HttpClientTestingModule, RouterTestingModule],
@@ -39,6 +48,18 @@ describe('HomeComponent', () => {
3948
provide: UserService,
4049
useValue: mockUserService,
4150
},
51+
{
52+
provide: ComplianceAndEnforcementService,
53+
useValue: mockComplianceAndEnforcementService,
54+
},
55+
{
56+
provide: ToastService,
57+
useValue: mockToastService,
58+
},
59+
{
60+
provide: Router,
61+
useValue: mockRouter,
62+
},
4263
],
4364
}).compileComponents();
4465

@@ -57,4 +78,54 @@ describe('HomeComponent', () => {
5778
expect(welcomeTitle).toBeTruthy();
5879
expect(welcomeTitle.textContent.trim()).toEqual('Welcome agent to ALCS');
5980
});
81+
82+
describe('createComplianceAndEnforcementFile', () => {
83+
it('shows success toast if service create fails', async () => {
84+
mockComplianceAndEnforcementService.create.mockRejectedValue(new Error());
85+
86+
await component.createComplianceAndEnforcementFile();
87+
88+
expect(mockToastService.showErrorToast).toHaveBeenCalledWith('Failed to create C&E file draft');
89+
});
90+
91+
it('shows error toast if service create fails', async () => {
92+
mockComplianceAndEnforcementService.create.mockResolvedValue({
93+
uuid: '12345',
94+
fileNumber: '12345',
95+
dateSubmitted: null,
96+
dateOpened: null,
97+
dateClosed: null,
98+
initialSubmissionType: null,
99+
allegedContraventionNarrative: '',
100+
allegedActivity: [],
101+
intakeNotes: '',
102+
});
103+
104+
await component.createComplianceAndEnforcementFile();
105+
106+
expect(mockToastService.showSuccessToast).toHaveBeenCalledWith('C&E file draft created');
107+
});
108+
109+
it('shows error toast if service create fails', async () => {
110+
const responseDto = {
111+
uuid: '12345',
112+
fileNumber: '12345',
113+
dateSubmitted: null,
114+
dateOpened: null,
115+
dateClosed: null,
116+
initialSubmissionType: null,
117+
allegedContraventionNarrative: '',
118+
allegedActivity: [],
119+
intakeNotes: '',
120+
};
121+
122+
mockComplianceAndEnforcementService.create.mockResolvedValue(responseDto);
123+
124+
await component.createComplianceAndEnforcementFile();
125+
126+
expect(mockRouter.navigateByUrl).toHaveBeenCalledWith(
127+
`/compliance-and-enforcement/${responseDto.fileNumber}/draft`,
128+
);
129+
});
130+
});
60131
});

alcs-frontend/src/app/features/home/home.component.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import { AuthenticationService, ICurrentUser, ROLES } from '../../services/authe
66
import { CARD_SUBTASK_TYPE } from '../../services/card/card-subtask/card-subtask.dto';
77
import { UserDto } from '../../services/user/user.dto';
88
import { UserService } from '../../services/user/user.service';
9+
import { ComplianceAndEnforcementService } from '../../services/compliance-and-enforcement/compliance-and-enforcement.service';
10+
import { ToastService } from '../../services/toast/toast.service';
11+
import { Router } from '@angular/router';
912

1013
@Component({
1114
selector: 'app-home',
@@ -29,7 +32,10 @@ export class HomeComponent implements OnInit, OnDestroy {
2932
constructor(
3033
private authService: AuthenticationService,
3134
private userService: UserService,
32-
private titleService: Title
35+
private titleService: Title,
36+
private complianceAndEnforcementService: ComplianceAndEnforcementService,
37+
private toastService: ToastService,
38+
private router: Router,
3339
) {}
3440

3541
ngOnInit(): void {
@@ -68,4 +74,15 @@ export class HomeComponent implements OnInit, OnDestroy {
6874
}
6975

7076
protected readonly ROLES = ROLES;
77+
78+
async createComplianceAndEnforcementFile() {
79+
try {
80+
const fileNumber = (await this.complianceAndEnforcementService.create({})).fileNumber;
81+
this.toastService.showSuccessToast('C&E file draft created');
82+
this.router.navigateByUrl(`/compliance-and-enforcement/${fileNumber}/draft`);
83+
} catch (error) {
84+
console.error('Error creating C&E file draft', error);
85+
this.toastService.showErrorToast('Failed to create C&E file draft');
86+
}
87+
}
7188
}

alcs-frontend/src/app/services/compliance-and-enforcement/compliance-and-enforcement.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class ComplianceAndEnforcementService {
2121
}
2222

2323
async create(updateDto: UpdateComplianceAndEnforcementDto) {
24-
return await firstValueFrom(this.http.post<UpdateComplianceAndEnforcementDto>(this.url, updateDto));
24+
return await firstValueFrom(this.http.post<ComplianceAndEnforcementDto>(this.url, updateDto));
2525
}
2626

2727
update(uuid: string, updateDto: UpdateComplianceAndEnforcementDto): Observable<ComplianceAndEnforcementDto> {

0 commit comments

Comments
 (0)