Created
September 16, 2024 11:25
-
-
Save HamsterofDeath/2292e4e425344c66865f7f378b5e20cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hod.btlg.persistence | |
import hod.btlg.DBFiddle | |
import io.getquill.* | |
import org.scalatest.BeforeAndAfterAll | |
import org.scalatest.flatspec.AnyFlatSpec | |
import org.scalatest.matchers.should.Matchers | |
import java.time.{ OffsetDateTime, ZoneOffset } | |
import scala.compiletime.uninitialized | |
class FeedbacksSpec extends PostgresBase { | |
import DBFiddle.pctx | |
import pctx.* | |
var testUser: BrainLiftUser = uninitialized | |
override def beforeAll(): Unit = { | |
super.beforeAll() | |
Feedbacks.init() | |
testUser = Accounts.insertUser( | |
BrainLiftUser( | |
"test", | |
0, | |
s"testUser${System.currentTimeMillis()}", | |
Some(s"Test User feedback ${System.currentTimeMillis()}") | |
).verified | |
) | |
require(testUser.internalId > 0) | |
} | |
"insertFeedback" should "successfully insert feedback for a logged-in user" in { | |
val feedback = Feedback( | |
internalId = 0, | |
userId = Some(testUser.internalId), | |
feedbackType = "positive", | |
message = "Great app!", | |
created = OffsetDateTime.now(ZoneOffset.UTC) | |
) | |
val insertedId = Feedbacks.insertFeedback(feedback) | |
insertedId should be > 0L | |
val insertedFeedback = pctx.run(query[Feedback].filter(_.internalId == lift(insertedId))).headOption | |
insertedFeedback shouldBe defined | |
insertedFeedback.get.userId shouldBe Some(testUser.internalId) | |
insertedFeedback.get.feedbackType shouldBe "positive" | |
insertedFeedback.get.message shouldBe "Great app!" | |
} | |
it should "successfully insert feedback for an anonymous user" in { | |
val feedback = Feedback( | |
internalId = 0, | |
userId = None, | |
feedbackType = "neutral", | |
message = "It's okay", | |
created = OffsetDateTime.now(ZoneOffset.UTC) | |
) | |
val insertedId = Feedbacks.insertFeedback(feedback) | |
insertedId should be > 0L | |
val insertedFeedback = pctx.run(query[Feedback].filter(_.internalId == lift(insertedId))).headOption | |
insertedFeedback shouldBe defined | |
insertedFeedback.get.userId shouldBe None | |
insertedFeedback.get.feedbackType shouldBe "neutral" | |
insertedFeedback.get.message shouldBe "It's okay" | |
} | |
"findFeedbackByUser" should "return feedback for a specific user" in { | |
val feedback1 = Feedback(0, Some(testUser.internalId), "positive", "Feedback 1", OffsetDateTime.now(ZoneOffset.UTC)) | |
val feedback2 = Feedback(0, Some(testUser.internalId), "negative", "Feedback 2", OffsetDateTime.now(ZoneOffset.UTC)) | |
Feedbacks.insertFeedback(feedback1) | |
Feedbacks.insertFeedback(feedback2) | |
val userFeedback = Feedbacks.findFeedbackByUser(testUser.internalId) | |
userFeedback.size should be >= 2 | |
userFeedback.map(_.userId) should contain only Some(testUser.internalId) | |
} | |
"findFeedbackByType" should "return feedback of a specific type" in { | |
val feedback1 = | |
Feedback(0, Some(testUser.internalId), "positive", "Positive feedback", OffsetDateTime.now(ZoneOffset.UTC)) | |
val feedback2 = Feedback(0, None, "positive", "Another positive feedback", OffsetDateTime.now(ZoneOffset.UTC)) | |
Feedbacks.insertFeedback(feedback1) | |
Feedbacks.insertFeedback(feedback2) | |
val positiveFeedback = Feedbacks.findFeedbackByType("positive") | |
positiveFeedback.size should be >= 2 | |
positiveFeedback.map(_.feedbackType) should contain only "positive" | |
} | |
"findFeedbackByDateRange" should "return feedback within a specific date range" in { | |
val now = OffsetDateTime.now(ZoneOffset.UTC) | |
val twoDaysAgo = now.minusDays(2) | |
val yesterday = now.minusDays(1) | |
val tomorrow = now.plusDays(1) | |
val oldFeedback = Feedback(0, Some(testUser.internalId), "old", "Old feedback", twoDaysAgo) | |
val recentFeedback = Feedback(0, Some(testUser.internalId), "recent", "Recent feedback", now) | |
Feedbacks.insertFeedback(oldFeedback) | |
Feedbacks.insertFeedback(recentFeedback) | |
val feedbackInRange = Feedbacks.findFeedbackByDateRange(yesterday, tomorrow) | |
feedbackInRange.size should be >= 1 | |
feedbackInRange.map(_.feedbackType) should contain("recent") | |
feedbackInRange.map(_.feedbackType) should not contain ("old") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment