Calcule date de fin en fonction du temps estimé
This commit is contained in:
@@ -162,7 +162,7 @@
|
||||
[class.is-invalid]="!!dateValidationError"
|
||||
type="date"
|
||||
[(ngModel)]="issue.startDate"
|
||||
(blur)="saveIssue()"
|
||||
(blur)="onStartDateBlur()"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
@@ -170,10 +170,9 @@
|
||||
<input
|
||||
aria-label="Date de fin"
|
||||
class="form-control form-control-sm"
|
||||
[class.is-invalid]="!!dateValidationError"
|
||||
type="date"
|
||||
[(ngModel)]="issue.endDate"
|
||||
(blur)="saveIssue()"
|
||||
[ngModel]="issue.endDate"
|
||||
readonly
|
||||
/>
|
||||
</div>
|
||||
@if (dateValidationError) {
|
||||
|
||||
@@ -299,6 +299,64 @@ describe('IssueDetail — existing issue', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('recalculateEndDate (via estimatedTimeValue setter)', () => {
|
||||
it('sets endDate to startDate when estimatedTime is 8h or less', () => {
|
||||
(component as any).issue.startDate = '2026-06-01';
|
||||
(component as any).estimatedTimeValue = 8;
|
||||
expect((component as any).issue.endDate).toBe('2026-06-01');
|
||||
});
|
||||
|
||||
it('adds one day for estimatedTime between 9h and 16h', () => {
|
||||
(component as any).issue.startDate = '2026-06-01';
|
||||
(component as any).estimatedTimeValue = 16;
|
||||
expect((component as any).issue.endDate).toBe('2026-06-02');
|
||||
});
|
||||
|
||||
it('adds two days for estimatedTime between 17h and 24h', () => {
|
||||
(component as any).issue.startDate = '2026-06-01';
|
||||
(component as any).estimatedTimeValue = 24;
|
||||
expect((component as any).issue.endDate).toBe('2026-06-03');
|
||||
});
|
||||
|
||||
it('clears endDate when startDate is empty', () => {
|
||||
(component as any).issue.startDate = '';
|
||||
(component as any).issue.endDate = '2026-06-05';
|
||||
(component as any).estimatedTimeValue = 8;
|
||||
expect((component as any).issue.endDate).toBe('');
|
||||
});
|
||||
|
||||
it('clears endDate when estimatedTime is null', () => {
|
||||
(component as any).issue.startDate = '2026-06-01';
|
||||
(component as any).issue.endDate = '2026-06-05';
|
||||
(component as any).estimatedTimeValue = null;
|
||||
expect((component as any).issue.endDate).toBe('');
|
||||
});
|
||||
|
||||
it('clears endDate when estimatedTime is 0', () => {
|
||||
(component as any).issue.startDate = '2026-06-01';
|
||||
(component as any).issue.endDate = '2026-06-05';
|
||||
(component as any).estimatedTimeValue = 0;
|
||||
expect((component as any).issue.endDate).toBe('');
|
||||
});
|
||||
});
|
||||
|
||||
describe('onStartDateBlur', () => {
|
||||
it('recalculates endDate when startDate changes', () => {
|
||||
(component as any).issue.estimatedTime = 16;
|
||||
(component as any).issue.startDate = '2026-06-10';
|
||||
(component as any).onStartDateBlur();
|
||||
expect((component as any).issue.endDate).toBe('2026-06-11');
|
||||
});
|
||||
|
||||
it('clears endDate when startDate is cleared', () => {
|
||||
(component as any).issue.estimatedTime = 16;
|
||||
(component as any).issue.endDate = '2026-06-11';
|
||||
(component as any).issue.startDate = '';
|
||||
(component as any).onStartDateBlur();
|
||||
expect((component as any).issue.endDate).toBe('');
|
||||
});
|
||||
});
|
||||
|
||||
describe('deleteIssue', () => {
|
||||
it('removes the issue and navigates to /issues', async () => {
|
||||
const spy = vi.spyOn(router, 'navigate').mockResolvedValue(true);
|
||||
|
||||
@@ -122,6 +122,24 @@ export class IssueDetail {
|
||||
|
||||
protected set estimatedTimeValue(value: number | null) {
|
||||
this.issue.estimatedTime = value === null || value === undefined ? null : Number(value);
|
||||
this.recalculateEndDate();
|
||||
}
|
||||
|
||||
private recalculateEndDate(): void {
|
||||
const { startDate, estimatedTime } = this.issue;
|
||||
if (!startDate || estimatedTime === null || estimatedTime <= 0) {
|
||||
this.issue.endDate = '';
|
||||
return;
|
||||
}
|
||||
const start = new Date(startDate);
|
||||
const extraDays = Math.max(0, Math.ceil(estimatedTime / 8) - 1);
|
||||
start.setDate(start.getDate() + extraDays);
|
||||
this.issue.endDate = start.toISOString().split('T')[0];
|
||||
}
|
||||
|
||||
protected onStartDateBlur(): void {
|
||||
this.recalculateEndDate();
|
||||
this.saveIssue();
|
||||
}
|
||||
|
||||
protected get issueTypeValue(): IssueEntity['type'] {
|
||||
|
||||
Reference in New Issue
Block a user