DateTimeUtils Testing - UQdeco2800/2021-ext-studio-2 GitHub Wiki
Description
The idea is to test the DateTimeUtils to check if the prettified easily readable date and time strings returned by DateTimeUtils class functions are returned properly.
Testing Plan
The plan is to test all the public static functions that are exposed by the DateTimeUtils.java.
This involves:-
- Testing edge case dates
 
Sample Code: Testing getVerboseDate function edge case inputs, and check if the function still returns the date in a prettified verbose format.
        time = LocalDateTime.parse("9999-12-30T23:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Thursday, December 30, 9999", res);
        time = LocalDateTime.parse("2018-12-30T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Sunday, December 30, 2018", res);
        // Test for one digit date
        time = LocalDateTime.parse("2018-12-03T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Monday, December 3, 2018", res);
        // Test for 5 letter months
        time = LocalDateTime.parse("2018-03-03T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Saturday, March 3, 2018", res);
        time = LocalDateTime.parse("2018-04-03T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Tuesday, April 3, 2018", res);
        // Test for 3 letter month
        time = LocalDateTime.parse("2018-05-01T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Tuesday, May 1, 2018", res);
        // Test for 4 letter month
        time = LocalDateTime.parse("2018-06-30T11:59:59.63");
        res = DateTimeUtils.getVerboseDate(time);
        assertEquals("Saturday, June 30, 2018", res);
- Testing current date and time
 
Sample Code: Testing getVerboseDate function which returns the date in a prettified verbose format.
        // Testing the logic for current time
        time = LocalDateTime.now();
        res = DateTimeUtils.getVerboseDate(time);
        // Extracting week day and capitalizing it
        String weekDay = time.getDayOfWeek().toString().toLowerCase();
        weekDay = weekDay.substring(0, 1).toUpperCase() + weekDay.substring(1);
        // Extracting month and capitalizing it
        String month = time.getMonth().toString().toLowerCase();
        month = month.substring(0, 1).toUpperCase() + month.substring(1);
        // Extracting year
        String year = String.valueOf(time.getYear());
        // Extracting day
        String day = String.valueOf(time.getDayOfMonth());
        // Constructing the date string to be in the expected format
        String expectedStr = weekDay + ", " + month + " " + day + ", " + year;
        // Testing it against the one returned from DateTimeUtils
        assertEquals(expectedStr, res);
Outcomes
- Issues Detected and Resolved: The verbose date returned came in a reverse order on Windows and Macbook, but not on Debian based Linux distros. This bug was detected through the comprehensive tests written in 
DateTimeUtils.javaand then fixed so that the game shows the prettified date and time in the same format across operating systems. 
Future Plans
- There are some repetitive patterns in the code which Team 7 will aim to reduce in Sprint 4. So refactoring this test will be picked up as a task.