Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: #346 Fixing date time query generation for reports
  • Loading branch information
Juan Gabriel Guzman committed Jun 15, 2020
commit 778d55d6ba2f2f2faae6444b3c5855143f3ae491
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {FormControl, FormGroup} from '@angular/forms';
import * as entryActions from '../../../time-clock/store/entry.actions';
import {Store} from '@ngrx/store';
import {EntryState} from '../../../time-clock/store/entry.reducer';
import * as moment from 'moment';

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

onSubmit() {
this.store.dispatch(new entryActions.LoadEntriesByTimeRange({
start_date: this.startDate.value,
end_date: this.endDate.value,
start_date: moment(this.startDate.value).startOf('day'),
end_date: moment(this.endDate.value).endOf('day'),
user_id: '*',
}));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {EntryState} from '../../../time-clock/store/entry.reducer';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {InputDateComponent} from '../../../shared/components/input-date/input-date.component';
import * as entryActions from '../../../time-clock/store/entry.actions';
import * as moment from 'moment';

describe('Reports Page', () => {
describe('TimeRangeFormComponent', () => {
Expand Down Expand Up @@ -54,19 +55,17 @@ describe('Reports Page', () => {
});

it('when submitting form a new LoadEntriesByTimeRange action is triggered', () => {

const startDateValue = new Date();
const endDateValue = new Date();
endDateValue.setMonth(1);
const yesterday = moment(new Date()).subtract(1, 'days');
const today = moment(new Date());
spyOn(store, 'dispatch');
component.reportForm.controls.startDate.setValue(startDateValue);
component.reportForm.controls.endDate.setValue(endDateValue);
component.reportForm.controls.startDate.setValue(yesterday);
component.reportForm.controls.endDate.setValue(today);

component.onSubmit();

expect(store.dispatch).toHaveBeenCalledWith(new entryActions.LoadEntriesByTimeRange({
start_date: startDateValue,
end_date: endDateValue,
start_date: yesterday.startOf('day'),
end_date: today.endOf('day'),
user_id: '*',
}));
});
Expand Down
6 changes: 4 additions & 2 deletions src/app/modules/time-clock/models/time-entries-time-range.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {Moment} from 'moment';

export interface TimeEntriesTimeRange {
start_date: Date;
end_date: Date;
start_date: Moment;
end_date: Moment;
user_id: string;
}
11 changes: 6 additions & 5 deletions src/app/modules/time-clock/services/entry.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {EntryService} from './entry.service';
import {NewEntry} from '../../shared/models';
import {DatePipe} from '@angular/common';
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
import * as moment from 'moment';

describe('EntryService', () => {
let service: EntryService;
Expand Down Expand Up @@ -89,17 +90,17 @@ describe('EntryService', () => {
});

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

service.loadEntriesByTimeRange(timeRange).subscribe();

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

expect(loadEntryRequest.request.params.get('start_date')).toBe(pipe.transform(startDateValue,
expect(loadEntryRequest.request.params.get('start_date')).toBe(pipe.transform(yesterday,
EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
expect(loadEntryRequest.request.params.get('end_date')).toBe(pipe.transform(endDateValue, EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
expect(loadEntryRequest.request.params.get('end_date')).toBe(pipe.transform(today, EntryService.TIME_ENTRIES_DATE_TIME_FORMAT));
});
});
16 changes: 8 additions & 8 deletions src/app/modules/time-clock/services/entry.service.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {TimeEntriesSummary} from '../models/time.entry.summary';
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import { TimeEntriesSummary } from '../models/time.entry.summary';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

import {Observable} from 'rxjs';
import {environment} from './../../../../environments/environment';
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
import {DatePipe} from '@angular/common';
import { Observable } from 'rxjs';
import { environment } from './../../../../environments/environment';
import { TimeEntriesTimeRange } from '../models/time-entries-time-range';
import { DatePipe } from '@angular/common';

@Injectable({
providedIn: 'root',
Expand All @@ -15,7 +15,7 @@ export class EntryService {
constructor(private http: HttpClient, private datePipe: DatePipe) {
}

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

loadActiveEntry(): Observable<any> {
Expand Down
5 changes: 3 additions & 2 deletions src/app/modules/time-clock/store/entry.effects.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {DatePipe} from '@angular/common';
import {EntryActionTypes} from './entry.actions';
import {EntryService} from '../services/entry.service';
import {TimeEntriesTimeRange} from '../models/time-entries-time-range';
import * as moment from 'moment';

describe('TimeEntryActionEffects', () => {

Expand Down Expand Up @@ -57,7 +58,7 @@ describe('TimeEntryActionEffects', () => {
});

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

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

Expand Down