Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* Any copyright is dedicated to the Public Domain.
package org.mozilla.geckoview.test
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import junit.framework.TestCase.assertFalse
import junit.framework.TestCase.assertNull
import junit.framework.TestCase.assertTrue
import org.hamcrest.Matchers.* // ktlint-disable no-wildcard-imports
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.geckoview.* // ktlint-disable no-wildcard-imports
import org.mozilla.geckoview.GeckoSession.AnalysisStatusResponse
import org.mozilla.geckoview.GeckoSession.ContentDelegate
import org.mozilla.geckoview.GeckoSession.Recommendation
import org.mozilla.geckoview.GeckoSession.ReviewAnalysis
import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.AssertCalled
@RunWith(AndroidJUnit4::class)
@MediumTest
class ReviewQualityCheckerTest : BaseSessionTest() {
@Before
fun setup() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"toolkit.shopping.ohttpRelayURL" to "",
"toolkit.shopping.ohttpConfigURL" to "",
"geckoview.shopping.mock_test_response" to true,
),
)
}
@After
fun cleanup() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"geckoview.shopping.mock_test_response" to false,
),
)
}
@Test
fun onProductUrl() {
mainSession.loadUri("example.com")
sessionRule.waitForPageStop()
mainSession.loadUri("example.com/dp/ABCDEFG")
sessionRule.waitForPageStop()
// test below working product urls
mainSession.loadUri("example.com/dp/ABCDEFG123")
sessionRule.waitForPageStop()
mainSession.loadUri("example.com/dp/HIJKLMN456")
sessionRule.waitForPageStop()
mainSession.loadUri("example.com/dp/OPQRSTU789")
sessionRule.waitForPageStop()
mainSession.delegateUntilTestEnd(object : ContentDelegate {
@AssertCalled(count = 3)
override fun onProductUrl(session: GeckoSession) {}
})
}
@Test
fun requestAnalysis() {
// Test for the builder constructor
val productId = "banana"
val grade = "A"
val adjustedRating = 4.5
val lastAnalysisTime = 12345.toLong()
val analysisURL = "https://analysis.com"
val analysisObject = ReviewAnalysis.Builder(productId)
.analysisUrl(analysisURL)
.grade(grade)
.adjustedRating(adjustedRating)
.needsAnalysis(true)
.pageNotSupported(false)
.notEnoughReviews(false)
.highlights(null)
.lastAnalysisTime(lastAnalysisTime)
.deletedProductReported(true)
.deletedProduct(true)
.build()
assertThat("Analysis URL should match", analysisObject.analysisURL, equalTo(analysisURL))
assertThat("Product id should match", analysisObject.productId, equalTo(productId))
assertThat("Product grade should match", analysisObject.grade, equalTo(grade))
assertThat("Product adjusted rating should match", analysisObject.adjustedRating, equalTo(adjustedRating))
assertTrue("NeedsAnalysis should match", analysisObject.needsAnalysis)
assertFalse("PageNotSupported should match", analysisObject.pageNotSupported)
assertFalse("NotEnoughReviews should match", analysisObject.notEnoughReviews)
assertNull("Highlights should match", analysisObject.highlights)
assertTrue("Product should not be reported that it was deleted", analysisObject.deletedProductReported)
assertTrue("Not a deleted product", analysisObject.deletedProduct)
assertThat("Last analysis time should match", analysisObject.lastAnalysisTime, equalTo(lastAnalysisTime))
sessionRule.setPrefsUntilTestEnd(
mapOf(
"geckoview.shopping.mock_test_response" to true,
),
)
val result = mainSession.requestAnalysis("https://www.example.com/mock")
sessionRule.waitForResult(result).let {
assertThat("Review analysis url should match", it.analysisURL, equalTo("https://www.example.com/mock_analysis_url"))
assertThat("Product id should match", it.productId, equalTo("ABCDEFG123"))
assertThat("Product grade should match", it.grade, equalTo("B"))
assertThat("Product adjusted rating should match", it.adjustedRating, equalTo(4.5))
assertTrue("NeedsAnalysis should match", it.needsAnalysis)
assertTrue("PageNotSupported should match", it.pageNotSupported)
assertTrue("NotEnoughReviews should match", it.notEnoughReviews)
assertNull("Highlights should match", analysisObject.highlights)
assertThat("Last analysis time should match", analysisObject.lastAnalysisTime, equalTo(lastAnalysisTime))
assertTrue("DeletedProductReported should match", it.deletedProductReported)
assertTrue("DeletedProduct should match", it.deletedProduct)
}
}
@Test
fun requestCreateAnalysisAndStatus() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"geckoview.shopping.mock_test_response" to true,
),
)
val createResult = mainSession.requestCreateAnalysis("https://www.example.com/mock/")
assertThat("Analysis status should match", sessionRule.waitForResult(createResult), equalTo("pending"))
val status = "in_progress"
val progress = 90.9
val analysisObject = AnalysisStatusResponse.Builder(status)
.progress(progress)
.build()
assertThat("Analysis URL should match", analysisObject, notNullValue())
assertThat("Analysis URL should match", analysisObject.status, equalTo(status))
assertThat("Product id should match", analysisObject.progress, equalTo(progress))
val statusResult = mainSession.requestAnalysisStatus("https://www.example.com/mock/")
sessionRule.waitForResult(statusResult).let {
assertThat(
"Analysis status should match",
it.status,
equalTo("in_progress"),
)
assertThat(
"Analysis progress should match",
it.progress,
equalTo(90.9),
)
}
}
@Test
fun requestRecommendations() {
// Test the Builder constructor
val adjustedRating = 3.5
val aid = "mock_aid"
val name = "Mock Product"
val grade = "C"
val price = "450"
val currency = "USD"
val recommendationObject = Recommendation.Builder(url)
.adjustedRating(adjustedRating)
.sponsored(true)
.imageUrl(imageUrl)
.aid(aid)
.name(name)
.grade(grade)
.price(price)
.currency(currency)
.build()
assertThat("Recommendation URL should match", recommendationObject.url, equalTo(url))
assertThat("Adjusted rating should match", recommendationObject.adjustedRating, equalTo(adjustedRating))
assertThat("Recommendation sponsored field should match", recommendationObject.sponsored, equalTo(true))
assertThat("Image URL should match", recommendationObject.imageUrl, equalTo(imageUrl))
assertThat("Aid should match", recommendationObject.aid, equalTo(aid))
assertThat("Name should match", recommendationObject.name, equalTo(name))
assertThat("Grade should match", recommendationObject.grade, equalTo(grade))
assertThat("Price should match", recommendationObject.price, equalTo(price))
assertThat("Currency should match", recommendationObject.currency, equalTo(currency))
val result = mainSession.requestRecommendations("https://www.example.com/mock")
sessionRule.waitForResult(result)
.let {
assertThat("Recommendation URL should match", recommendationObject.url, equalTo(url))
assertThat("Adjusted rating should match", recommendationObject.adjustedRating, equalTo(adjustedRating))
assertThat("Recommendation sponsored field should match", recommendationObject.sponsored, equalTo(true))
assertThat("Image URL should match", recommendationObject.imageUrl, equalTo(imageUrl))
assertThat("Aid should match", recommendationObject.aid, equalTo(aid))
assertThat("Name should match", recommendationObject.name, equalTo(name))
assertThat("Grade should match", recommendationObject.grade, equalTo(grade))
assertThat("Price should match", recommendationObject.price, equalTo(price))
assertThat("Currency should match", recommendationObject.currency, equalTo(currency))
}
}
@Test
fun sendAttributionEvents() {
val aid = "TEST_AID"
val validClickResult = mainSession.sendClickAttributionEvent(aid)
assertThat(
"Click event success result should be true",
sessionRule.waitForResult(validClickResult),
equalTo(true),
)
val validImpressionResult = mainSession.sendImpressionAttributionEvent(aid)
assertThat(
"Impression event success result should be true",
sessionRule.waitForResult(validImpressionResult),
equalTo(true),
)
val validPlacementResult = mainSession.sendPlacementAttributionEvent(aid)
assertThat(
"Placement event success result should be true",
sessionRule.waitForResult(validPlacementResult),
equalTo(true),
)
}
@Test
fun reportBackInStock() {
val result = mainSession.reportBackInStock("https://www.example.com/mock")
assertThat("Report back in stock status matches", sessionRule.waitForResult(result), equalTo("report created"))
}
}