Skip to content

Commit

Permalink
NTV-336: Project Model (#1510)
Browse files Browse the repository at this point in the history
  • Loading branch information
Arkariang committed Jan 13, 2022
1 parent 4dd0d25 commit f76a44f
Show file tree
Hide file tree
Showing 46 changed files with 902 additions and 532 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/com/kickstarter/libs/AnalyticEvents.kt
Expand Up @@ -488,7 +488,7 @@ class AnalyticEvents(trackingClients: List<TrackingClientType?>) {
*/
fun trackWatchProjectCTA(project: Project) {
val props: HashMap<String, Any> = hashMapOf(CONTEXT_CTA.contextName to WATCH_PROJECT.contextName)
props[CONTEXT_TYPE.contextName] = if (project.isStarred) WATCH.contextName else UNWATCH.contextName
props[CONTEXT_TYPE.contextName] = if (project.isStarred()) WATCH.contextName else UNWATCH.contextName
props[CONTEXT_PAGE.contextName] = PROJECT.contextName
props.putAll(AnalyticEventsUtils.projectProperties(project, client.loggedInUser()))
client.track(CTA_CLICKED.eventName, props)
Expand Down
Expand Up @@ -267,8 +267,8 @@ object AnalyticEventsUtils {
put("static_usd_rate", project.staticUsdRate())
project.updatesCount()?.let { put("updates_count", it) }
put("user_is_project_creator", project.userIsCreator(loggedInUser))
put("user_is_backer", project.isBacking)
put("user_has_watched", project.isStarred)
put("user_is_backer", project.isBacking())
put("user_has_watched", project.isStarred())

val hasAddOns = project.rewards()?.find {
it.hasAddons()
Expand Down
14 changes: 7 additions & 7 deletions app/src/main/java/com/kickstarter/libs/utils/ProjectViewUtils.kt
Expand Up @@ -27,7 +27,7 @@ object ProjectViewUtils {
*/
@ColorRes
fun pledgeActionButtonColor(project: Project, currentUser: User?): Int {
return if (project.isBacking && project.isLive) {
return if (project.isBacking() && project.isLive) {
R.color.button_pledge_manage
} else if (!project.isLive || project.creator().id() == currentUser?.id()) {
when {
Expand All @@ -46,15 +46,15 @@ object ProjectViewUtils {
fun pledgeActionButtonText(project: Project, currentUser: User?, variant: OptimizelyExperiment.Variant?): Int {
return if (project.creator().id() == currentUser?.id()) {
R.string.View_your_rewards
} else if (!project.isBacking && project.isLive) {
} else if (!project.isBacking() && project.isLive) {
when (variant) {
OptimizelyExperiment.Variant.VARIANT_1 -> R.string.See_the_rewards
OptimizelyExperiment.Variant.VARIANT_2 -> R.string.View_the_rewards
else -> R.string.Back_this_project
}
} else if (project.isBacking && project.isLive) {
} else if (project.isBacking() && project.isLive) {
R.string.Manage
} else if (project.isBacking && !project.isLive) {
} else if (project.isBacking() && !project.isLive) {
when {
project.backing()?.let { backing -> backing.isErrored() } == true -> R.string.Manage
else -> R.string.View_your_pledge
Expand All @@ -68,11 +68,11 @@ object ProjectViewUtils {
fun pledgeToolbarTitle(project: Project, currentUser: User?): Int {
return if (project.creator().id() == currentUser?.id()) {
R.string.View_your_rewards
} else if (!project.isBacking && project.isLive) {
} else if (!project.isBacking() && project.isLive) {
R.string.Back_this_project
} else if (project.isBacking && project.isLive) {
} else if (project.isBacking() && project.isLive) {
R.string.Manage_your_pledge
} else if (project.isBacking && !project.isLive) {
} else if (project.isBacking() && !project.isLive) {
R.string.View_your_pledge
} else {
R.string.View_rewards
Expand Down
Expand Up @@ -160,8 +160,8 @@ fun isProjectNamePunctuated(name: String): Boolean = name.substring(name.length
*/
fun Project.metadataForProject(): ProjectMetadata? =
when {
this.isBacking -> ProjectMetadata.BACKING
this.isStarred -> ProjectMetadata.SAVING
this.isBacking() -> ProjectMetadata.BACKING
this.isStarred() -> ProjectMetadata.SAVING
this.isFeaturedToday -> ProjectMetadata.CATEGORY_FEATURED
else -> null
}
Expand Down Expand Up @@ -198,7 +198,7 @@ fun isUSUserViewingNonUSProject(userCountry: String, projectCountry: String): Bo
* In order to update the fulfillment state for a project
* the the user needs to be a backer, and the project successful
*/
fun Project.canUpdateFulfillment() = isBacking && isSuccessful
fun Project.canUpdateFulfillment() = isBacking() && isSuccessful

enum class ProjectMetadata {
BACKING, SAVING, CATEGORY_FEATURED
Expand Down
69 changes: 36 additions & 33 deletions app/src/main/java/com/kickstarter/mock/factories/ProjectFactory.kt
@@ -1,27 +1,21 @@
package com.kickstarter.mock.factories

import com.kickstarter.mock.factories.CategoryFactory.category
import com.kickstarter.mock.factories.LocationFactory.mexico
import com.kickstarter.mock.factories.LocationFactory.unitedStates
import com.kickstarter.mock.factories.PaymentSourceFactory.Companion.visa
import com.kickstarter.mock.factories.ProjectEnvironmentalCommitmentFactory.Companion.getEnvironmentalCommitments
import com.kickstarter.mock.factories.ProjectFaqFactory.Companion.getFaqs
import com.kickstarter.mock.factories.UserFactory.creator
import com.kickstarter.models.Backing
import com.kickstarter.models.Backing.Companion.builder
import com.kickstarter.models.Project
import com.kickstarter.models.Reward
import com.kickstarter.models.Urls
import com.kickstarter.models.Web
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import type.CreditCardTypes

object ProjectFactory {
@JvmStatic
fun project(): Project {
val creator = creator()
val creator = UserFactory.creator()
val slug = "slug-1"
val projectUrl = "https://www.kickstarter.com/projects/" + creator.id() + "/" + slug
val web = Project.Urls.Web.builder()
val web = Web.builder()
.project(projectUrl)
.rewards("$projectUrl/rewards")
.updates("$projectUrl/posts")
Expand All @@ -40,8 +34,8 @@ object ProjectFactory {
)
.backersCount(100)
.blurb("Some blurb")
.category(category())
.creator(creator())
.category(CategoryFactory.category())
.creator(UserFactory.creator())
.country("US")
.createdAt(DateTime.now(DateTimeZone.UTC))
.currency("USD")
Expand All @@ -51,7 +45,7 @@ object ProjectFactory {
.fxRate(1.0f)
.goal(100.0)
.id(IdFactory.id().toLong())
.location(unitedStates())
.location(LocationFactory.unitedStates())
.name("Some Name")
.pledged(50.0)
.photo(PhotoFactory.photo())
Expand All @@ -61,29 +55,30 @@ object ProjectFactory {
.staticUsdRate(1.0f)
.usdExchangeRate(1.0f)
.slug(slug)
.projectFaqs(getFaqs())
.envCommitments(getEnvironmentalCommitments())
.projectFaqs(ProjectFaqFactory.getFaqs())
.envCommitments(ProjectEnvironmentalCommitmentFactory.getEnvironmentalCommitments())
.updatedAt(DateTime.now())
.urls(Project.Urls.builder().web(web).build())
.urls(Urls.builder().web(web).build())
.video(VideoFactory.video())
.launchedAt(DateTime(DateTimeZone.UTC).minusDays(10))
.deadline(DateTime(DateTimeZone.UTC).plusDays(10))
.risks("Risks and challenges")
.build()
}

@JvmStatic
fun backedProjectWithError(): Project {
val project = project()
val reward = RewardFactory.reward()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
.id(IdFactory.id().toLong())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.paymentSource(visa())
.paymentSource(PaymentSourceFactory.visa())
.pledgedAt(DateTime.now())
.projectId(project.id())
.shippingAmount(0.0f)
Expand All @@ -96,6 +91,7 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun britishProject(): Project {
return project()
.toBuilder()
Expand All @@ -109,15 +105,15 @@ object ProjectFactory {
fun backedProject(): Project {
val project = project()
val reward = RewardFactory.reward()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
.id(IdFactory.id().toLong())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.paymentSource(visa())
.paymentSource(PaymentSourceFactory.visa())
.pledgedAt(DateTime.now())
.projectId(project.id())
.shippingAmount(0.0f)
Expand All @@ -131,6 +127,7 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun backedProjectWithRewardAndAddOnsLimitReached(): Project {
val project = project()
val reward = RewardFactory.reward().toBuilder().hasAddons(true).limit(10).build()
Expand All @@ -142,7 +139,7 @@ object ProjectFactory {
.build()
val addOns: MutableList<Reward> = ArrayList()
addOns.add(add1)
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.addOns(addOns)
Expand All @@ -151,7 +148,7 @@ object ProjectFactory {
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.paymentSource(visa())
.paymentSource(PaymentSourceFactory.visa())
.pledgedAt(DateTime.now())
.projectId(project.id())
.shippingAmount(0.0f)
Expand All @@ -164,14 +161,15 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun backedProjectWithAddOns(): Project {
val project = project()
val reward = RewardFactory.reward().toBuilder().hasAddons(true).build()
val add1 = RewardFactory.addOn()
val addOns: MutableList<Reward> = ArrayList()
addOns.add(add1)
addOns.add(add1)
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.addOns(addOns)
Expand All @@ -180,7 +178,7 @@ object ProjectFactory {
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.paymentSource(visa())
.paymentSource(PaymentSourceFactory.visa())
.pledgedAt(DateTime.now())
.projectId(project.id())
.shippingAmount(0.0f)
Expand All @@ -193,18 +191,19 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun backedProjectRewardAvailableAddOnsNotBackedAddOns(): Project {
val project = project()
val reward = RewardFactory.reward().toBuilder().hasAddons(true).isAvailable(true).build()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
.id(IdFactory.id().toLong())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.paymentSource(visa())
.paymentSource(PaymentSourceFactory.visa())
.pledgedAt(DateTime.now())
.projectId(project.id())
.shippingAmount(0.0f)
Expand All @@ -217,6 +216,7 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun projectWithAddOns(): Project {
val rwWithAddOn =
RewardFactory.reward().toBuilder().hasAddons(true).build()
Expand All @@ -225,10 +225,11 @@ object ProjectFactory {
return project().toBuilder().rewards(listOf(rw, rwWithAddOn)).build()
}

@JvmStatic
fun backedSuccessfulProject(): Project {
val project = successfulProject()
val reward = RewardFactory.reward()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
Expand All @@ -251,7 +252,7 @@ object ProjectFactory {
fun backedProjectWithRewardLimited(): Project {
val project = project()
val reward = RewardFactory.limited()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
Expand All @@ -271,13 +272,14 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun backedProjectWithRewardLimitReached(): Project {
val project = project()
val reward = RewardFactory.limitReached()
.toBuilder()
.hasAddons(true)
.build()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
Expand All @@ -297,10 +299,11 @@ object ProjectFactory {
.build()
}

@JvmStatic
fun backedProjectWithNoReward(): Project {
val project = project()
val reward = RewardFactory.noReward()
val backing = builder()
val backing = Backing.builder()
.amount(10.0)
.backerId(IdFactory.id().toLong())
.cancelable(true)
Expand Down Expand Up @@ -418,7 +421,7 @@ object ProjectFactory {
.currentCurrency("MXN")
.currencySymbol("$")
.currency("MXN")
.location(mexico())
.location(LocationFactory.mexico())
.staticUsdRate(0.75f)
.usdExchangeRate(0.75f)
.fxRate(0.75f)
Expand Down Expand Up @@ -493,15 +496,15 @@ object ProjectFactory {
}

fun prelaunchProject(projectUrl: String): Project {
val web = Project.Urls.Web.builder()
val web = Web.builder()
.project(projectUrl)
.rewards("$projectUrl/rewards")
.updates("$projectUrl/posts")
.build()
return project()
.toBuilder()
.displayPrelaunch(true)
.urls(Project.Urls.builder().web(web).build())
.urls(Urls.builder().web(web).build())
.build()
}

Expand Down
Expand Up @@ -376,7 +376,7 @@ open class MockApiClient : ApiClientType {
}

override fun toggleProjectSave(project: Project): Observable<Project> {
return Observable.just(project.toBuilder().isStarred(!project.isStarred).build())
return Observable.just(project.toBuilder().isStarred(!project.isStarred()).build())
}

override fun fetchUnansweredSurveys(): Observable<List<SurveyResponse>> {
Expand Down

0 comments on commit f76a44f

Please sign in to comment.