Skip to content

Commit 778d55d

Browse files
author
Juan Gabriel Guzman
committed
feat: #346 Fixing date time query generation for reports
1 parent 8394861 commit 778d55d

File tree

6 files changed

+31
-27
lines changed

6 files changed

+31
-27
lines changed

src/app/modules/reports/components/time-range-form/time-range-form.component.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {FormControl, FormGroup} from '@angular/forms';
33
import * as entryActions from '../../../time-clock/store/entry.actions';
44
import {Store} from '@ngrx/store';
55
import {EntryState} from '../../../time-clock/store/entry.reducer';
6+
import * as moment from 'moment';
67

78
@Component({
89
selector: 'app-time-range-form',
@@ -22,8 +23,8 @@ export class TimeRangeFormComponent {
2223

2324
onSubmit() {
2425
this.store.dispatch(new entryActions.LoadEntriesByTimeRange({
25-
start_date: this.startDate.value,
26-
end_date: this.endDate.value,
26+
start_date: moment(this.startDate.value).startOf('day'),
27+
end_date: moment(this.endDate.value).endOf('day'),
2728
user_id: '*',
2829
}));
2930
}

src/app/modules/reports/components/time-range-form/time-range.component.spec.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {EntryState} from '../../../time-clock/store/entry.reducer';
55
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
66
import {InputDateComponent} from '../../../shared/components/input-date/input-date.component';
77
import * as entryActions from '../../../time-clock/store/entry.actions';
8+
import * as moment from 'moment';
89

910
describe('Reports Page', () => {
1011
describe('TimeRangeFormComponent', () => {
@@ -54,19 +55,17 @@ describe('Reports Page', () => {
5455
});
5556

5657
it('when submitting form a new LoadEntriesByTimeRange action is triggered', () => {
57-
58-
const startDateValue = new Date();
59-
const endDateValue = new Date();
60-
endDateValue.setMonth(1);
58+
const yesterday = moment(new Date()).subtract(1, 'days');
59+
const today = moment(new Date());
6160
spyOn(store, 'dispatch');
62-
component.reportForm.controls.startDate.setValue(startDateValue);
63-
component.reportForm.controls.endDate.setValue(endDateValue);
61+
component.reportForm.controls.startDate.setValue(yesterday);
62+
component.reportForm.controls.endDate.setValue(today);
6463

6564
component.onSubmit();
6665

6766
expect(store.dispatch).toHaveBeenCalledWith(new entryActions.LoadEntriesByTimeRange({
68-
start_date: startDateValue,
69-
end_date: endDateValue,
67+
start_date: yesterday.startOf('day'),
68+
end_date: today.endOf('day'),
7069
user_id: '*',
7170
}));
7271
});
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import {Moment} from 'moment';
2+
13
export interface TimeEntriesTimeRange {
2-
start_date: Date;
3-
end_date: Date;
4+
start_date: Moment;
5+
end_date: Moment;
46
user_id: string;
57
}

src/app/modules/time-clock/services/entry.service.spec.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {EntryService} from './entry.service';
55
import {NewEntry} from '../../shared/models';
66
import {DatePipe} from '@angular/common';
77
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
8+
import * as moment from 'moment';
89

910
describe('EntryService', () => {
1011
let service: EntryService;
@@ -89,17 +90,17 @@ describe('EntryService', () => {
8990
});
9091

9192
it('when getting time entries for report, time range should be sent', () => {
92-
const startDateValue = new Date();
93-
const endDateValue = new Date();
93+
const yesterday = moment(new Date()).subtract(1, 'day');
94+
const today = moment(new Date());
9495
const pipe: DatePipe = new DatePipe('en');
95-
const timeRange: TimeEntriesTimeRange = {start_date: startDateValue, end_date: endDateValue, user_id: '*'};
96+
const timeRange: TimeEntriesTimeRange = {start_date: yesterday, end_date: today, user_id: '*'};
9697

9798
service.loadEntriesByTimeRange(timeRange).subscribe();
9899

99100
const loadEntryRequest = httpMock.expectOne(req => req.method === 'GET' && req.url === service.baseUrl);
100101

101-
expect(loadEntryRequest.request.params.get('start_date')).toBe(pipe.transform(startDateValue,
102+
expect(loadEntryRequest.request.params.get('start_date')).toBe(pipe.transform(yesterday,
102103
EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
103-
expect(loadEntryRequest.request.params.get('end_date')).toBe(pipe.transform(endDateValue, EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
104+
expect(loadEntryRequest.request.params.get('end_date')).toBe(pipe.transform(today, EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
104105
});
105106
});

src/app/modules/time-clock/services/entry.service.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import {TimeEntriesSummary} from '../models/time.entry.summary';
2-
import {Injectable} from '@angular/core';
3-
import {HttpClient} from '@angular/common/http';
1+
import { TimeEntriesSummary } from '../models/time.entry.summary';
2+
import { Injectable } from '@angular/core';
3+
import { HttpClient } from '@angular/common/http';
44

5-
import {Observable} from 'rxjs';
6-
import {environment} from './../../../../environments/environment';
7-
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
8-
import {DatePipe} from '@angular/common';
5+
import { Observable } from 'rxjs';
6+
import { environment } from './../../../../environments/environment';
7+
import { TimeEntriesTimeRange } from '../models/time-entries-time-range';
8+
import { DatePipe } from '@angular/common';
99

1010
@Injectable({
1111
providedIn: 'root',
@@ -15,7 +15,7 @@ export class EntryService {
1515
constructor(private http: HttpClient, private datePipe: DatePipe) {
1616
}
1717

18-
static TIME_ENTRIES_DATE_TIME_FORMAT = 'yyyy-MM-ddThh:mm:ssZZZZZ';
18+
static TIME_ENTRIES_DATE_TIME_FORMAT = 'yyyy-MM-ddTHH:mm:ssZZZZZ';
1919
baseUrl = `${environment.timeTrackerApiUrl}/time-entries`;
2020

2121
loadActiveEntry(): Observable<any> {

src/app/modules/time-clock/store/entry.effects.spec.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {DatePipe} from '@angular/common';
1010
import {EntryActionTypes} from './entry.actions';
1111
import {EntryService} from '../services/entry.service';
1212
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
13+
import * as moment from 'moment';
1314

1415
describe('TimeEntryActionEffects', () => {
1516

@@ -57,7 +58,7 @@ describe('TimeEntryActionEffects', () => {
5758
});
5859

5960
it('When the service returns a value, then LOAD_ENTRIES_BY_TIME_RANGE_SUCCESS should be triggered', () => {
60-
const timeRange: TimeEntriesTimeRange = {start_date: new Date(), end_date: new Date(), user_id: '*' };
61+
const timeRange: TimeEntriesTimeRange = {start_date: moment(new Date()), end_date: moment(new Date()), user_id: '*' };
6162
actions$ = of({type: EntryActionTypes.LOAD_ENTRIES_BY_TIME_RANGE, timeRange});
6263
const serviceSpy = spyOn(service, 'loadEntriesByTimeRange');
6364
serviceSpy.and.returnValue(of([]));
@@ -69,7 +70,7 @@ describe('TimeEntryActionEffects', () => {
6970
});
7071

7172
it('When the service fails, then LOAD_ENTRIES_BY_TIME_RANGE_FAIL should be triggered', async () => {
72-
const timeRange: TimeEntriesTimeRange = {start_date: new Date(), end_date: new Date(), user_id: '*'};
73+
const timeRange: TimeEntriesTimeRange = {start_date: moment(new Date()), end_date: moment(new Date()), user_id: '*'};
7374
actions$ = of({type: EntryActionTypes.LOAD_ENTRIES_BY_TIME_RANGE, timeRange});
7475
spyOn(service, 'loadEntriesByTimeRange').and.returnValue(throwError('any error'));
7576

0 commit comments

Comments
 (0)