238 lines
6.7 KiB
Go
238 lines
6.7 KiB
Go
|
/*
|
||
|
Pominal
|
||
|
Copyright (C) 2020 Daniel Anglin
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
package main
|
||
|
|
||
|
var newPominalTestCases = []struct {
|
||
|
name string
|
||
|
description string
|
||
|
config PominalConfig
|
||
|
expectedPominal Pominal
|
||
|
}{
|
||
|
{
|
||
|
name: "Test case 1",
|
||
|
description: "When creating a Pominal value with all valid parameters.",
|
||
|
config: PominalConfig{
|
||
|
MaxWorkSessions: 5,
|
||
|
Sessions: Sessions{
|
||
|
Work: SessionConfig{
|
||
|
Duration: "20m",
|
||
|
NotificationMessage: "work time!",
|
||
|
},
|
||
|
ShortBreak: SessionConfig{
|
||
|
Duration: "5m",
|
||
|
NotificationMessage: "break time!",
|
||
|
},
|
||
|
LongBreak: SessionConfig{
|
||
|
Duration: "10m",
|
||
|
NotificationMessage: "long break time!",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedPominal: Pominal{
|
||
|
workSession: 1,
|
||
|
maxWorkSessions: 5,
|
||
|
cycle: 1,
|
||
|
countdown: 0,
|
||
|
work: 1200,
|
||
|
shortBreak: 300,
|
||
|
longBreak: 600,
|
||
|
workNotificationMsg: "work time!",
|
||
|
shortBreakNotificationMsg: "break time!",
|
||
|
longBreakNotificationMsg: "long break time!",
|
||
|
currentNotificationMsg: "",
|
||
|
label: "",
|
||
|
stopChan: nil,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "Test case 2",
|
||
|
description: "When creating a Pominal value where the work session is set below the minimum allowed time.",
|
||
|
config: PominalConfig{
|
||
|
MaxWorkSessions: 4,
|
||
|
Sessions: Sessions{
|
||
|
Work: SessionConfig{
|
||
|
Duration: "59s999ms",
|
||
|
},
|
||
|
ShortBreak: SessionConfig{
|
||
|
Duration: "25m36s",
|
||
|
},
|
||
|
LongBreak: SessionConfig{
|
||
|
Duration: "30m",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedPominal: Pominal{
|
||
|
workSession: 1,
|
||
|
maxWorkSessions: 4,
|
||
|
cycle: 1,
|
||
|
countdown: 0,
|
||
|
work: 60,
|
||
|
shortBreak: 1536,
|
||
|
longBreak: 1800,
|
||
|
workNotificationMsg: "",
|
||
|
shortBreakNotificationMsg: "",
|
||
|
longBreakNotificationMsg: "",
|
||
|
currentNotificationMsg: "",
|
||
|
label: "",
|
||
|
stopChan: nil,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "Test case 3",
|
||
|
description: "When creating a Pominal value where both short break and long break sessions are set below the minimum allowed time.",
|
||
|
config: PominalConfig{
|
||
|
MaxWorkSessions: 1,
|
||
|
Sessions: Sessions{
|
||
|
Work: SessionConfig{
|
||
|
Duration: "16m40s",
|
||
|
},
|
||
|
ShortBreak: SessionConfig{
|
||
|
Duration: "1s23ms",
|
||
|
},
|
||
|
LongBreak: SessionConfig{
|
||
|
Duration: "45s674ms",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedPominal: Pominal{
|
||
|
workSession: 1,
|
||
|
maxWorkSessions: 1,
|
||
|
cycle: 1,
|
||
|
countdown: 0,
|
||
|
work: 1000,
|
||
|
shortBreak: 60,
|
||
|
longBreak: 60,
|
||
|
workNotificationMsg: "",
|
||
|
shortBreakNotificationMsg: "",
|
||
|
longBreakNotificationMsg: "",
|
||
|
currentNotificationMsg: "",
|
||
|
label: "",
|
||
|
stopChan: nil,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "Test case 4",
|
||
|
description: "When creatng a Pominal where the maximum work sessions set below 1 (this covers unconfigured).",
|
||
|
config: PominalConfig{
|
||
|
MaxWorkSessions: -1,
|
||
|
Sessions: Sessions{
|
||
|
Work: SessionConfig{
|
||
|
Duration: "25m",
|
||
|
},
|
||
|
ShortBreak: SessionConfig{
|
||
|
Duration: "5m",
|
||
|
},
|
||
|
LongBreak: SessionConfig{
|
||
|
Duration: "20m",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedPominal: Pominal{
|
||
|
workSession: 1,
|
||
|
maxWorkSessions: defaultMaxWorkSessions,
|
||
|
cycle: 1,
|
||
|
countdown: 0,
|
||
|
work: 1500,
|
||
|
shortBreak: 300,
|
||
|
longBreak: 1200,
|
||
|
workNotificationMsg: "",
|
||
|
shortBreakNotificationMsg: "",
|
||
|
longBreakNotificationMsg: "",
|
||
|
currentNotificationMsg: "",
|
||
|
label: "",
|
||
|
stopChan: nil,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "Test case 5",
|
||
|
description: "When creatng a Pominal where the work session time is unconfigured.",
|
||
|
config: PominalConfig{
|
||
|
MaxWorkSessions: 4,
|
||
|
Sessions: Sessions{
|
||
|
Work: SessionConfig{},
|
||
|
ShortBreak: SessionConfig{
|
||
|
Duration: "10m",
|
||
|
},
|
||
|
LongBreak: SessionConfig{
|
||
|
Duration: "30m",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
expectedPominal: Pominal{
|
||
|
workSession: 1,
|
||
|
maxWorkSessions: 4,
|
||
|
cycle: 1,
|
||
|
countdown: 0,
|
||
|
work: 1500,
|
||
|
shortBreak: 600,
|
||
|
longBreak: 1800,
|
||
|
workNotificationMsg: "",
|
||
|
shortBreakNotificationMsg: "",
|
||
|
longBreakNotificationMsg: "",
|
||
|
currentNotificationMsg: "",
|
||
|
label: "",
|
||
|
stopChan: nil,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
var sessionsTestCases = []struct {
|
||
|
name string
|
||
|
description string
|
||
|
expectedWorkSession int
|
||
|
expectedCycle int
|
||
|
expectedLabel string
|
||
|
}{
|
||
|
{
|
||
|
name: "Test session 1",
|
||
|
description: "When the first work session has started.",
|
||
|
expectedWorkSession: 1,
|
||
|
expectedCycle: 1,
|
||
|
expectedLabel: workTimerLabel,
|
||
|
},
|
||
|
{
|
||
|
name: "Test session 2",
|
||
|
description: "When the first work session has finished and the short break session has started.",
|
||
|
expectedWorkSession: 1,
|
||
|
expectedCycle: 1,
|
||
|
expectedLabel: shortBreakTimerLabel,
|
||
|
},
|
||
|
{
|
||
|
name: "Test session 3",
|
||
|
description: "When the short break session has finished and the second work session has started.",
|
||
|
expectedWorkSession: 2,
|
||
|
expectedCycle: 1,
|
||
|
expectedLabel: workTimerLabel,
|
||
|
},
|
||
|
{
|
||
|
name: "Test session 4",
|
||
|
description: "When the second work session has finished and the long break has started.",
|
||
|
expectedWorkSession: 2,
|
||
|
expectedCycle: 1,
|
||
|
expectedLabel: longBreakTimerLabel,
|
||
|
},
|
||
|
{
|
||
|
name: "Test session 5",
|
||
|
description: "When the long break session has finished and the new work session has started for the next Pominal cycle.",
|
||
|
expectedWorkSession: 1,
|
||
|
expectedCycle: 2,
|
||
|
expectedLabel: workTimerLabel,
|
||
|
},
|
||
|
}
|