mirror of https://github.com/iSoron/uhabits.git
parent
5ba2001102
commit
4e70c38a7a
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"artifactType": {
|
||||||
|
"type": "APK",
|
||||||
|
"kind": "Directory"
|
||||||
|
},
|
||||||
|
"applicationId": "org.isoron.uhabits",
|
||||||
|
"variantName": "release",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "SINGLE",
|
||||||
|
"filters": [],
|
||||||
|
"attributes": [],
|
||||||
|
"versionCode": 20202,
|
||||||
|
"versionName": "2.2.2",
|
||||||
|
"outputFile": "uhabits-android-release.apk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"elementType": "File",
|
||||||
|
"baselineProfiles": [
|
||||||
|
{
|
||||||
|
"minApi": 28,
|
||||||
|
"maxApi": 30,
|
||||||
|
"baselineProfiles": [
|
||||||
|
"baselineProfiles/1/uhabits-android-release.dm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minApi": 31,
|
||||||
|
"maxApi": 2147483647,
|
||||||
|
"baselineProfiles": [
|
||||||
|
"baselineProfiles/0/uhabits-android-release.dm"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minSdkVersionForDexing": 28
|
||||||
|
}
|
@ -0,0 +1,266 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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 org.isoron.uhabits.core.models
|
||||||
|
|
||||||
|
import org.hamcrest.CoreMatchers.equalTo
|
||||||
|
import org.hamcrest.CoreMatchers.not
|
||||||
|
import org.hamcrest.MatcherAssert.assertThat
|
||||||
|
import org.isoron.uhabits.core.BaseUnitTest
|
||||||
|
import org.junit.Assert.assertThrows
|
||||||
|
import org.junit.Test
|
||||||
|
import java.io.IOException
|
||||||
|
import java.io.StringWriter
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertFalse
|
||||||
|
import kotlin.test.assertNull
|
||||||
|
|
||||||
|
class HabitGroupListTest : BaseUnitTest() {
|
||||||
|
private lateinit var habitGroupArray: ArrayList<HabitGroup>
|
||||||
|
private lateinit var activeHabitGroups: HabitGroupList
|
||||||
|
private lateinit var reminderHabitGroups: HabitGroupList
|
||||||
|
|
||||||
|
@Throws(Exception::class)
|
||||||
|
override fun setUp() {
|
||||||
|
super.setUp()
|
||||||
|
habitGroupArray = ArrayList()
|
||||||
|
for (i in 0..9) {
|
||||||
|
val hgr = groupFixtures.createEmptyHabitGroup()
|
||||||
|
habitGroupList.add(hgr)
|
||||||
|
habitGroupArray.add(hgr)
|
||||||
|
if (i % 3 == 0) hgr.reminder = Reminder(8, 30, WeekdayList.EVERY_DAY)
|
||||||
|
}
|
||||||
|
habitGroupArray[0].isArchived = true
|
||||||
|
habitGroupArray[1].isArchived = true
|
||||||
|
habitGroupArray[4].isArchived = true
|
||||||
|
habitGroupArray[7].isArchived = true
|
||||||
|
activeHabitGroups = habitGroupList.getFiltered(HabitMatcher())
|
||||||
|
reminderHabitGroups = habitGroupList.getFiltered(
|
||||||
|
HabitMatcher(
|
||||||
|
isArchivedAllowed = true,
|
||||||
|
isReminderRequired = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSize() {
|
||||||
|
assertThat(habitGroupList.size(), equalTo(10))
|
||||||
|
assertThat(activeHabitGroups.size(), equalTo(6))
|
||||||
|
assertThat(reminderHabitGroups.size(), equalTo(4))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetByPosition() {
|
||||||
|
assertThat(habitGroupList.getByPosition(0), equalTo(habitGroupArray[0]))
|
||||||
|
assertThat(habitGroupList.getByPosition(3), equalTo(habitGroupArray[3]))
|
||||||
|
assertThat(habitGroupList.getByPosition(9), equalTo(habitGroupArray[9]))
|
||||||
|
assertThat(activeHabitGroups.getByPosition(0), equalTo(habitGroupArray[2]))
|
||||||
|
assertThat(reminderHabitGroups.getByPosition(1), equalTo(habitGroupArray[3]))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetById() {
|
||||||
|
val hgr1 = habitGroupArray[0]
|
||||||
|
val hgr2 = habitGroupList.getById(hgr1.id!!)
|
||||||
|
assertThat(hgr1, equalTo(hgr2))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetById_withInvalidId() {
|
||||||
|
assertNull(habitGroupList.getById(100L))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testOrdering() {
|
||||||
|
val hgr1 = groupFixtures.createEmptyHabitGroup("A Habit Group", PaletteColor(2), 1)
|
||||||
|
val hgr2 = groupFixtures.createEmptyHabitGroup("B Habit Group", PaletteColor(2), 3)
|
||||||
|
val hgr3 = groupFixtures.createEmptyHabitGroup("C Habit Group", PaletteColor(0), 0)
|
||||||
|
val hgr4 = groupFixtures.createEmptyHabitGroup("D Habit Group", PaletteColor(1), 2)
|
||||||
|
|
||||||
|
val list = modelFactory.buildHabitGroupList().apply {
|
||||||
|
add(hgr3)
|
||||||
|
add(hgr1)
|
||||||
|
add(hgr4)
|
||||||
|
add(hgr2)
|
||||||
|
}
|
||||||
|
|
||||||
|
list.primaryOrder = HabitList.Order.BY_POSITION
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr3))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr1))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr4))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr2))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_NAME_DESC
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr4))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr3))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr2))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr1))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_NAME_ASC
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr1))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr2))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr3))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr4))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_NAME_ASC
|
||||||
|
list.remove(hgr1)
|
||||||
|
list.add(hgr1)
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr1))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_COLOR_ASC
|
||||||
|
list.secondaryOrder = HabitList.Order.BY_NAME_ASC
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr3))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr4))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr1))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr2))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_COLOR_DESC
|
||||||
|
list.secondaryOrder = HabitList.Order.BY_NAME_ASC
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr1))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr2))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr4))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr3))
|
||||||
|
list.primaryOrder = HabitList.Order.BY_POSITION
|
||||||
|
assertThat(list.getByPosition(0), equalTo(hgr3))
|
||||||
|
assertThat(list.getByPosition(1), equalTo(hgr1))
|
||||||
|
assertThat(list.getByPosition(2), equalTo(hgr4))
|
||||||
|
assertThat(list.getByPosition(3), equalTo(hgr2))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testReorder() {
|
||||||
|
val operations =
|
||||||
|
arrayOf(intArrayOf(5, 2), intArrayOf(3, 7), intArrayOf(4, 4), intArrayOf(8, 3))
|
||||||
|
val expectedSequence = arrayOf(
|
||||||
|
intArrayOf(0, 1, 5, 2, 3, 4, 6, 7, 8, 9),
|
||||||
|
intArrayOf(0, 1, 5, 2, 4, 6, 7, 3, 8, 9),
|
||||||
|
intArrayOf(0, 1, 5, 2, 4, 6, 7, 3, 8, 9),
|
||||||
|
intArrayOf(0, 1, 5, 2, 4, 6, 7, 8, 3, 9)
|
||||||
|
)
|
||||||
|
for (i in operations.indices) {
|
||||||
|
val fromHabitGroup = habitGroupArray[operations[i][0]]
|
||||||
|
val toHabitGroup = habitGroupArray[operations[i][1]]
|
||||||
|
habitGroupList.reorder(fromHabitGroup, toHabitGroup)
|
||||||
|
val actualSequence = IntArray(10)
|
||||||
|
for (j in 0..9) {
|
||||||
|
val hgr = habitGroupList.getByPosition(j)
|
||||||
|
assertThat(hgr.position, equalTo(j))
|
||||||
|
actualSequence[j] = Math.toIntExact(hgr.id!!)
|
||||||
|
}
|
||||||
|
assertThat(actualSequence, equalTo(expectedSequence[i]))
|
||||||
|
}
|
||||||
|
assertThat(activeHabitGroups.indexOf(habitGroupArray[5]), equalTo(0))
|
||||||
|
assertThat(activeHabitGroups.indexOf(habitGroupArray[2]), equalTo(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testReorder_withInvalidArguments() {
|
||||||
|
val hgr1 = habitGroupArray[0]
|
||||||
|
val hgr2 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
assertThrows(IllegalArgumentException::class.java) {
|
||||||
|
habitGroupList.reorder(hgr1, hgr2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testOrder_inherit() {
|
||||||
|
habitGroupList.primaryOrder = HabitList.Order.BY_COLOR_ASC
|
||||||
|
val filteredList = habitGroupList.getFiltered(
|
||||||
|
HabitMatcher(
|
||||||
|
isArchivedAllowed = false,
|
||||||
|
isCompletedAllowed = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assertEquals(filteredList.primaryOrder, HabitList.Order.BY_COLOR_ASC)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun testWriteCSV() {
|
||||||
|
val list = modelFactory.buildHabitGroupList()
|
||||||
|
val hgr1 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
hgr1.name = "Meditate"
|
||||||
|
hgr1.question = "Did you meditate this morning?"
|
||||||
|
hgr1.description = "this is a test description"
|
||||||
|
hgr1.color = PaletteColor(3)
|
||||||
|
val hgr2 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
hgr2.name = "Wake up early"
|
||||||
|
hgr2.question = "Did you wake up before 6am?"
|
||||||
|
hgr2.description = ""
|
||||||
|
hgr2.color = PaletteColor(5)
|
||||||
|
list.add(hgr1)
|
||||||
|
list.add(hgr2)
|
||||||
|
val expectedCSV =
|
||||||
|
"""
|
||||||
|
Position,Name,Question,Description,Color
|
||||||
|
001,Meditate,Did you meditate this morning?,this is a test description,#FF8F00
|
||||||
|
002,Wake up early,Did you wake up before 6am?,,#AFB42B
|
||||||
|
|
||||||
|
""".trimIndent()
|
||||||
|
val writer = StringWriter()
|
||||||
|
list.writeCSV(writer)
|
||||||
|
assertThat(writer.toString(), equalTo(expectedCSV))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAdd() {
|
||||||
|
val hgr1 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
assertFalse(hgr1.isArchived)
|
||||||
|
assertNull(hgr1.id)
|
||||||
|
assertThat(habitGroupList.indexOf(hgr1), equalTo(-1))
|
||||||
|
habitGroupList.add(hgr1)
|
||||||
|
hgr1.id!!
|
||||||
|
assertThat(habitGroupList.indexOf(hgr1), not(equalTo(-1)))
|
||||||
|
assertThat(activeHabitGroups.indexOf(hgr1), not(equalTo(-1)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testAdd_withFilteredList() {
|
||||||
|
assertThrows(IllegalStateException::class.java) {
|
||||||
|
activeHabitGroups.add(groupFixtures.createEmptyHabitGroup())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testRemove_onFilteredList() {
|
||||||
|
assertThrows(IllegalStateException::class.java) {
|
||||||
|
activeHabitGroups.remove(groupFixtures.createEmptyHabitGroup())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testReorder_onFilteredList() {
|
||||||
|
val hgr1 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
val hgr2 = groupFixtures.createEmptyHabitGroup()
|
||||||
|
assertThrows(IllegalStateException::class.java) {
|
||||||
|
activeHabitGroups.reorder(hgr1, hgr2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testReorder_onSortedList() {
|
||||||
|
habitGroupList.primaryOrder = HabitList.Order.BY_SCORE_DESC
|
||||||
|
val hgr1 = habitGroupArray[1]
|
||||||
|
val hgr2 = habitGroupArray[2]
|
||||||
|
assertThrows(IllegalStateException::class.java) {
|
||||||
|
habitGroupList.reorder(hgr1, hgr2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,188 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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 org.isoron.uhabits.core.models.sqlite
|
||||||
|
|
||||||
|
import org.hamcrest.CoreMatchers.equalTo
|
||||||
|
import org.hamcrest.MatcherAssert.assertThat
|
||||||
|
import org.isoron.uhabits.core.BaseUnitTest
|
||||||
|
import org.isoron.uhabits.core.database.Database
|
||||||
|
import org.isoron.uhabits.core.database.Repository
|
||||||
|
import org.isoron.uhabits.core.models.HabitGroup
|
||||||
|
import org.isoron.uhabits.core.models.HabitGroupList
|
||||||
|
import org.isoron.uhabits.core.models.HabitList
|
||||||
|
import org.isoron.uhabits.core.models.HabitMatcher
|
||||||
|
import org.isoron.uhabits.core.models.ModelObservable
|
||||||
|
import org.isoron.uhabits.core.models.Reminder
|
||||||
|
import org.isoron.uhabits.core.models.WeekdayList
|
||||||
|
import org.isoron.uhabits.core.models.sqlite.records.HabitGroupRecord
|
||||||
|
import org.isoron.uhabits.core.test.HabitGroupFixtures
|
||||||
|
import org.junit.Assert.assertThrows
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mockito.kotlin.mock
|
||||||
|
import org.mockito.kotlin.verify
|
||||||
|
import kotlin.test.assertNull
|
||||||
|
|
||||||
|
class SQLiteHabitGroupListTest : BaseUnitTest() {
|
||||||
|
private lateinit var repository: Repository<HabitGroupRecord>
|
||||||
|
private var listener: ModelObservable.Listener = mock()
|
||||||
|
private lateinit var habitGroupsArray: ArrayList<HabitGroup>
|
||||||
|
private lateinit var activeHabitGroups: HabitGroupList
|
||||||
|
private lateinit var reminderHabitGroups: HabitGroupList
|
||||||
|
|
||||||
|
@Throws(Exception::class)
|
||||||
|
override fun setUp() {
|
||||||
|
super.setUp()
|
||||||
|
val db: Database = buildMemoryDatabase()
|
||||||
|
modelFactory = SQLModelFactory(db)
|
||||||
|
habitGroupList = SQLiteHabitGroupList(modelFactory)
|
||||||
|
groupFixtures = HabitGroupFixtures(modelFactory, habitList, habitGroupList)
|
||||||
|
repository = Repository(HabitGroupRecord::class.java, db)
|
||||||
|
habitGroupsArray = ArrayList()
|
||||||
|
for (i in 0..9) {
|
||||||
|
val hgr = groupFixtures.createEmptyHabitGroup()
|
||||||
|
hgr.name = "habit group " + (i + 1)
|
||||||
|
habitGroupList.update(hgr)
|
||||||
|
habitGroupsArray.add(hgr)
|
||||||
|
if (i % 3 == 0) hgr.reminder = Reminder(8, 30, WeekdayList.EVERY_DAY)
|
||||||
|
}
|
||||||
|
habitGroupsArray[0].isArchived = true
|
||||||
|
habitGroupsArray[1].isArchived = true
|
||||||
|
habitGroupsArray[4].isArchived = true
|
||||||
|
habitGroupsArray[7].isArchived = true
|
||||||
|
habitGroupList.update(habitGroupsArray)
|
||||||
|
activeHabitGroups = habitGroupList.getFiltered(HabitMatcher())
|
||||||
|
reminderHabitGroups = habitGroupList.getFiltered(
|
||||||
|
HabitMatcher(
|
||||||
|
isArchivedAllowed = true,
|
||||||
|
isReminderRequired = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
habitGroupList.observable.addListener(listener)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(Exception::class)
|
||||||
|
override fun tearDown() {
|
||||||
|
habitGroupList.observable.removeListener(listener)
|
||||||
|
super.tearDown()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAdd_withDuplicate() {
|
||||||
|
val hgr = modelFactory.buildHabitGroup()
|
||||||
|
habitGroupList.add(hgr)
|
||||||
|
verify(listener).onModelChange()
|
||||||
|
assertThrows(IllegalArgumentException::class.java) {
|
||||||
|
habitGroupList.add(hgr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAdd_withId() {
|
||||||
|
val hgr = modelFactory.buildHabitGroup()
|
||||||
|
hgr.name = "Hello world with id"
|
||||||
|
hgr.id = 12300L
|
||||||
|
habitGroupList.add(hgr)
|
||||||
|
assertThat(hgr.id, equalTo(11L))
|
||||||
|
val record = repository.find(11L)
|
||||||
|
assertThat(record!!.name, equalTo(hgr.name))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAdd_withoutId() {
|
||||||
|
val hgr = modelFactory.buildHabitGroup()
|
||||||
|
hgr.name = "Hello world"
|
||||||
|
assertNull(hgr.id)
|
||||||
|
habitGroupList.add(hgr)
|
||||||
|
val record = repository.find(hgr.id!!)
|
||||||
|
assertThat(record!!.name, equalTo(hgr.name))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSize() {
|
||||||
|
assertThat(habitGroupList.size(), equalTo(10))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetById() {
|
||||||
|
val hgr1 = habitGroupList.getById(1)!!
|
||||||
|
assertThat(hgr1.name, equalTo("habit group 1"))
|
||||||
|
val hgr2 = habitGroupList.getById(2)!!
|
||||||
|
assertThat(hgr2, equalTo(hgr2))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetById_withInvalid() {
|
||||||
|
val invalidId = 9183792001L
|
||||||
|
val hgr1 = habitGroupList.getById(invalidId)
|
||||||
|
assertNull(hgr1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testGetByPosition() {
|
||||||
|
val hgr = habitGroupList.getByPosition(4)
|
||||||
|
assertThat(hgr.name, equalTo("habit group 5"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testIndexOf() {
|
||||||
|
val hgr1 = habitGroupList.getByPosition(5)
|
||||||
|
assertThat(habitGroupList.indexOf(hgr1), equalTo(5))
|
||||||
|
val hgr2 = modelFactory.buildHabitGroup()
|
||||||
|
assertThat(habitGroupList.indexOf(hgr2), equalTo(-1))
|
||||||
|
hgr2.id = 1000L
|
||||||
|
assertThat(habitGroupList.indexOf(hgr2), equalTo(-1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testRemove() {
|
||||||
|
val hgr = habitGroupList.getById(2)
|
||||||
|
habitGroupList.remove(hgr!!)
|
||||||
|
assertThat(habitGroupList.indexOf(hgr), equalTo(-1))
|
||||||
|
|
||||||
|
var rec = repository.find(2L)
|
||||||
|
assertNull(rec)
|
||||||
|
rec = repository.find(3L)!!
|
||||||
|
assertThat(rec.position, equalTo(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testRemove_orderByName() {
|
||||||
|
habitGroupList.primaryOrder = HabitList.Order.BY_NAME_DESC
|
||||||
|
val hgr = habitGroupList.getById(2)
|
||||||
|
habitGroupList.remove(hgr!!)
|
||||||
|
assertThat(habitGroupList.indexOf(hgr), equalTo(-1))
|
||||||
|
|
||||||
|
var rec = repository.find(2L)
|
||||||
|
assertNull(rec)
|
||||||
|
rec = repository.find(3L)!!
|
||||||
|
assertThat(rec.position, equalTo(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testReorder() {
|
||||||
|
val hgr3 = habitGroupList.getById(3)!!
|
||||||
|
val hgr4 = habitGroupList.getById(4)!!
|
||||||
|
habitGroupList.reorder(hgr4, hgr3)
|
||||||
|
val record3 = repository.find(3L)!!
|
||||||
|
assertThat(record3.position, equalTo(3))
|
||||||
|
val record4 = repository.find(4L)!!
|
||||||
|
assertThat(record4.position, equalTo(2))
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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 org.isoron.uhabits.core.models.sqlite.records
|
||||||
|
|
||||||
|
import org.hamcrest.CoreMatchers.equalTo
|
||||||
|
import org.hamcrest.MatcherAssert.assertThat
|
||||||
|
import org.isoron.uhabits.core.BaseUnitTest
|
||||||
|
import org.isoron.uhabits.core.models.PaletteColor
|
||||||
|
import org.isoron.uhabits.core.models.Reminder
|
||||||
|
import org.isoron.uhabits.core.models.WeekdayList
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class HabitGroupRecordTest : BaseUnitTest() {
|
||||||
|
@Test
|
||||||
|
fun testCopyRestore1() {
|
||||||
|
val original = modelFactory.buildHabitGroup().apply {
|
||||||
|
name = "Hello world"
|
||||||
|
question = "Did you greet the world today?"
|
||||||
|
color = PaletteColor(1)
|
||||||
|
isArchived = true
|
||||||
|
reminder = Reminder(8, 30, WeekdayList.EVERY_DAY)
|
||||||
|
id = 1000L
|
||||||
|
position = 20
|
||||||
|
}
|
||||||
|
val record = HabitGroupRecord()
|
||||||
|
record.copyFrom(original)
|
||||||
|
val duplicate = modelFactory.buildHabitGroup()
|
||||||
|
record.copyTo(duplicate)
|
||||||
|
assertThat(original, equalTo(duplicate))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testCopyRestore2() {
|
||||||
|
val original = modelFactory.buildHabitGroup().apply {
|
||||||
|
name = "Hello world"
|
||||||
|
question = "Did you greet the world today?"
|
||||||
|
color = PaletteColor(5)
|
||||||
|
isArchived = false
|
||||||
|
reminder = null
|
||||||
|
id = 1L
|
||||||
|
position = 15
|
||||||
|
}
|
||||||
|
val record = HabitGroupRecord()
|
||||||
|
record.copyFrom(original)
|
||||||
|
val duplicate = modelFactory.buildHabitGroup()
|
||||||
|
record.copyTo(duplicate)
|
||||||
|
assertThat(original, equalTo(duplicate))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue