Skip to content

Commit

Permalink
BAH-3049 | Deepti, Sweety | Add. Test cases for selected date range f…
Browse files Browse the repository at this point in the history
…unctionality for reports
  • Loading branch information
deeptirawat1510 committed Nov 30, 2023
1 parent 061b404 commit 45d5aac
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 27 deletions.
12 changes: 4 additions & 8 deletions ui/app/reports/controllers/reportsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,19 @@ angular.module('bahmni.reports')
$scope.enableReportQueue = appService.getAppDescriptor().getConfigValue("enableReportQueue");
$scope.setDefault = function (item, header) {
var setToChange = header === 'reportsRequiringDateRange' ? $rootScope.reportsRequiringDateRange : $rootScope.reportsNotRequiringDateRange;
var isPreviousMonth = $rootScope.default[header][item].getTime() === dateRange[2].getTime();
setToChange.forEach(function (report) {
if (item == 'dateRangeType') {
$rootScope.default.reportsRequiringDateRange.startDate = $rootScope.default[header][item];
$rootScope.default.reportsRequiringDateRange.stopDate = isPreviousMonth($rootScope.default[header][item]) ? getPreviousMonthEndDate() : dateRange[0];
$rootScope.default.reportsRequiringDateRange.stopDate = isPreviousMonth ? getPreviousMonthEndDate() : dateRange[0];
report['startDate'] = $rootScope.default[header][item];
report['stopDate'] = isPreviousMonth($rootScope.default[header][item]) ? getPreviousMonthEndDate() : dateRange[0];
report['stopDate'] = isPreviousMonth ? getPreviousMonthEndDate() : dateRange[0];
}
else if ($rootScope.default[header][item] === undefined) {
$rootScope.default.reportsRequiringDateRange.startDate = dateRange[0];
$rootScope.reportsRequiringDateRange.forEach(function (report) {
report.startDate = dateRange[0];
report.stopDate = isPreviousMonth(dateRange[0]) ? getPreviousMonthEndDate() : dateRange[0];
report.stopDate = isPreviousMonth ? getPreviousMonthEndDate() : dateRange[0];
report.responseType = format[1];
});
}
Expand All @@ -55,11 +56,6 @@ angular.module('bahmni.reports')
});
};

var isPreviousMonth = function (date) {
return (date.getMonth() === new Date().getMonth() - 1 && date.getFullYear() === new Date().getFullYear())
|| (date.getMonth() === 11 && date.getFullYear() === new Date().getFullYear() - 1);
};

var getPreviousMonthEndDate = function () {
return new Date(new Date().getFullYear(), new Date().getMonth(), 0);
};
Expand Down
2 changes: 1 addition & 1 deletion ui/app/reports/services/reportService.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ angular.module('bahmni.reports')
"Previous Month": new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1),
"This Quarter": new Date(currentDate.getFullYear(), Math.floor(currentDate.getMonth() / 3) * 3, 1),
"This Year": new Date(currentDate.getFullYear(), 0, 1),
"Last 7 days": new Date(new Date().setDate(currentDate.getDate() - 6)),
"Last 7 days": new Date(new Date().setDate(currentDate.getDate() - 7)),
"Last 30 days": new Date(new Date().setDate(currentDate.getDate() - 30))
};

Expand Down
151 changes: 133 additions & 18 deletions ui/test/unit/reports/controllers/reportsController.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,18 @@ describe("ReportsController", function () {
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": new Date(),
"This Month": new Date(new Date().getFullYear(), new Date().getMonth(), 1)
"This Month": new Date(new Date().getFullYear(), new Date().getMonth(), 1),
"Previous Month": new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1)
});
controller = $controller;
setupController();
}));

afterEach(function () {
window.Date = originalDate;
});

function setupController() {
controller('ReportsController', {
$scope: scope,
appService: appServiceMock,
Expand All @@ -72,11 +81,7 @@ describe("ReportsController", function () {
$rootScope: rootScope,
FileUploader: function () { }
});
}));

afterEach(function () {
window.Date = originalDate;
});
}

it("initializes report sets based on whether date range required or not", function () {
expect(mockAppDescriptor.getConfigForPage).toHaveBeenCalledWith("reports");
Expand All @@ -86,14 +91,7 @@ describe("ReportsController", function () {

it('should initialise formats based on the supportedFormats config', function () {
mockAppDescriptor.getConfigValue.and.returnValue(['csv', 'html']);
controller('ReportsController', {
$scope: scope,
appService: appServiceMock,
reportService: reportServiceMock,
messagingService: messagingServiceMock,
$rootScope: rootScope,
FileUploader: function () { }
});
setupController();

expect(_.keys(scope.formats).length).toBe(2);
expect(scope.formats['CSV']).toBe('text/csv');
Expand All @@ -111,6 +109,117 @@ describe("ReportsController", function () {
expect(rootScope.reportsRequiringDateRange[0].startDate.getDate()).toBe(new Date().getDate());
expect(rootScope.reportsRequiringDateRange[0].stopDate.getDate()).toBe(new Date().getDate());
});

it("should return the correct start and stop date when selected date range is last 30 days", function () {
var mockedDate = new Date('20-Dec-2023');
var expectedStartDate = new originalDate('20-Nov-2023');
spyOn(window, 'Date').and.callFake(function () {
return mockedDate;
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Dec-2023'),
"Previous Month": new originalDate('1-Nov-2023')
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: expectedStartDate,
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate).toEqual(expectedStartDate);
expect(rootScope.reportsRequiringDateRange[0].stopDate).toEqual(mockedDate);
});

it("should return the correct start and stop date when selected date range is last 7 days", function () {
var mockedDate = new Date('20-Dec-2023');
var expectedStartDate = new originalDate('13-Dec-2023');
spyOn(window, 'Date').and.callFake(function () {
return mockedDate;
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Dec-2023'),
"Previous Month": new originalDate('1-Nov-2023')
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: expectedStartDate,
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate).toEqual(expectedStartDate);
expect(rootScope.reportsRequiringDateRange[0].stopDate).toEqual(mockedDate);
});

it("should return the correct start and stop date when selected date range is this year", function () {
var mockedDate = new Date('20-Dec-2023');
var expectedStartDate = new originalDate('1-Jan-2023');
spyOn(window, 'Date').and.callFake(function () {
return mockedDate;
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Dec-2023'),
"Previous Month": new originalDate('1-Nov-2023')
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: expectedStartDate,
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate).toEqual(expectedStartDate);
expect(rootScope.reportsRequiringDateRange[0].stopDate).toEqual(mockedDate);
});

it("should return the correct start and stop date when selected date range is this quarter", function () {
var mockedDate = new Date('20-Dec-2023');
var expectedStartDate = new originalDate('1-Oct-2023');
spyOn(window, 'Date').and.callFake(function () {
return mockedDate;
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Dec-2023'),
"Previous Month": new originalDate('1-Nov-2023')
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: expectedStartDate,
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate).toEqual(expectedStartDate);
expect(rootScope.reportsRequiringDateRange[0].stopDate).toEqual(mockedDate);
});

it("should return the correct start and stop date when selected date range is this month", function () {
var mockedDate = new Date('20-Dec-2023');
var expectedStartDate = new originalDate('1-Dec-2023');
spyOn(window, 'Date').and.callFake(function () {
return mockedDate;
});
reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Dec-2023'),
"Previous Month": new originalDate('1-Nov-2023')
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: expectedStartDate,
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate).toEqual(expectedStartDate);
expect(rootScope.reportsRequiringDateRange[0].stopDate).toEqual(mockedDate);
});


const previousMonthTestCases = [
{ currentDate: '1-Dec-2022', expectedStartDate: '1-Nov-2022', expectedStopDate: '30-Nov-2022' },
Expand All @@ -129,14 +238,20 @@ describe("ReportsController", function () {
return mockedDate;
}
});

reportServiceMock.getAvailableDateRange.and.returnValue({
"Today": mockedDate,
"This Month": new originalDate('1-Jan-2023'),
"Previous Month": new originalDate(expectedStartDate)
});
setupController();

rootScope.default.reportsRequiringDateRange = {
dateRangeType: new originalDate(expectedStartDate),
};
scope.setDefault('dateRangeType', 'reportsRequiringDateRange');

expect(rootScope.reportsRequiringDateRange[0].startDate.getTime()).toBe(new originalDate(expectedStartDate).getTime());
expect(rootScope.reportsRequiringDateRange[0].stopDate.getTime()).toBe(new originalDate(expectedStopDate).getTime());
expect(rootScope.reportsRequiringDateRange[0].startDate.getTime()).toBe(new originalDate(expectedStartDate).getTime());
expect(rootScope.reportsRequiringDateRange[0].stopDate.getTime()).toBe(new originalDate(expectedStopDate).getTime());
});
});

Expand Down

0 comments on commit 45d5aac

Please sign in to comment.