Files
drip/e2e/dataInput.spec.js
T

130 lines
3.4 KiB
JavaScript

const LocalTime = require("js-joda").LocalTime
const ChronoUnit = require("js-joda").ChronoUnit
const {
symptomValues,
reloadApp,
goToHomePage,
goBack,
} = require('./helpers')
const minutes = ChronoUnit.MINUTES
let currentTime
const symptoms = Object.keys(symptomValues).map( symptom => {
return symptom === 'mucus' ? 'cervical mucus' : symptom
})
const navigateToSymptomView = (symptom) => {
return element(by.text(symptom)).tap()
}
const navigateToCycleDayOverview = () => {
return element(by.text('add data for today')).tap()
}
const tapExclude = () => {
return element(by.type('android.widget.CompoundButton')).tap()
}
const enterSymptomData = async (symptom) => {
const { valuesToSelect, shouldExclude } = symptomValues[symptom]
for (const value of valuesToSelect) {
await element(by.text(value)).tap()
}
if (shouldExclude) {
await tapExclude()
}
}
const formExpectedSymptomSummary = (symptom) => {
const { valuesToSelect, shouldExclude } = symptomValues[symptom]
let expectedText, temperature
switch (symptom) {
case 'temperature':
temperature = valuesToSelect[0]
expectedText = `${temperature} °C - ${currentTime}`
break
case 'mucus':
expectedText = `feeling: ${valuesToSelect[0]}, texture: ${valuesToSelect[1]}\n => S`
break
case 'cervix':
expectedText = `opening: ${valuesToSelect[0]}, firmness: ${valuesToSelect[1]}, position: ${valuesToSelect[2]}`
break
case 'note':
expectedText = valuesToSelect[0]
break
default: expectedText = valuesToSelect.join(', ')
}
if (shouldExclude) {
expectedText = `(${expectedText})`
}
return expectedText
}
const enterNote = async() => {
const note = symptomValues['note'].valuesToSelect[0]
await element(by.id('noteInput')).replaceText(note)
}
const enterTemperature = async() => {
const temperature = symptomValues['temperature'].valuesToSelect[0]
currentTime = LocalTime.now().truncatedTo(minutes).toString()
const note = symptomValues['temperature'].valuesToSelect[1]
await element(by.id('temperatureInput')).typeText(temperature)
await element(by.id('timeInput')).tap()
await element(by.text('OK')).tap()
await element(by.id('noteInput')).replaceText(note)
await tapExclude()
}
describe('Symptom Data Input', () => {
before(async () => {
await reloadApp()
await goToHomePage()
await navigateToCycleDayOverview()
})
for (const symptom of symptoms) {
it(`Should test ${symptom} data input.`, async () => {
await navigateToSymptomView(symptom)
let expectedSymptomSummary
await expect(element(by.id('symptomViewTitleName').and(by.text(symptom))))
.toBeVisible()
switch (symptom) {
case 'temperature':
await enterTemperature()
expectedSymptomSummary = formExpectedSymptomSummary('temperature')
console.log(
'This test a bit flaky. console.log apparently helps to fix it.'
)
break
case 'note':
await enterNote()
expectedSymptomSummary = formExpectedSymptomSummary('note')
break
case 'cervical mucus':
await enterSymptomData('mucus')
expectedSymptomSummary = formExpectedSymptomSummary('mucus')
break
default:
await enterSymptomData(symptom)
expectedSymptomSummary = formExpectedSymptomSummary(symptom)
}
await goBack()
await expect(element(by.text(expectedSymptomSummary))).toExist()
})
}
})