diff options
Diffstat (limited to 'mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ReviewQualityCheckerTest.kt')
-rw-r--r-- | mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ReviewQualityCheckerTest.kt | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ReviewQualityCheckerTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ReviewQualityCheckerTest.kt new file mode 100644 index 0000000000..254130db36 --- /dev/null +++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/ReviewQualityCheckerTest.kt @@ -0,0 +1,235 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- + * Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +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 url = "https://example.com/mock_url" + val adjustedRating = 3.5 + val imageUrl = "https://example.com/mock_image_url" + 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")) + } +} |