package com.kickstarter.factories;
import android.support.annotation.NonNull;
import com.kickstarter.models.Backing;
import com.kickstarter.models.Project;
import com.kickstarter.models.Reward;
import com.kickstarter.models.User;
import org.joda.time.DateTime;
public final class ProjectFactory {
private ProjectFactory() {}
public static @NonNull Project project() {
final User creator = UserFactory.creator();
final String slug = "slug-1";
final String projectUrl = "https://www.kickstarter.com/projects/" + String.valueOf(creator.id()) + "/" + slug;
final Project.Urls.Web web = Project.Urls.Web.builder()
.project(projectUrl)
.rewards(projectUrl + "/rewards")
.updates(projectUrl + "/posts")
.build();
return Project.builder()
.backersCount(100)
.blurb("Some blurb")
.category(CategoryFactory.category())
.creator(UserFactory.creator())
.country("US")
.createdAt(DateTime.now())
.currency("USD")
.currencySymbol("$")
.currencyTrailingCode(true)
.goal(100.0f)
.id(IdFactory.id())
.pledged(50.0f)
.name("Some Name")
.photo(PhotoFactory.photo())
.state(Project.STATE_LIVE)
.staticUsdRate(1.0f)
.slug(slug)
.updatedAt(DateTime.now())
.urls(Project.Urls.builder().web(web).build())
.video(VideoFactory.video())
.launchedAt(new DateTime().minusDays(10))
.deadline(new DateTime().plusDays(10))
.build();
}
public static @NonNull Project backedProject() {
final Project project = project();
final Reward reward = RewardFactory.reward();
final Backing backing = Backing.builder()
.amount(10.0f)
.backerId(IdFactory.id())
.id(IdFactory.id())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.pledgedAt(DateTime.now())
.projectCountry(project.country())
.projectId(project.id())
.shippingAmount(0.0f)
.status(Backing.STATUS_PLEDGED)
.build();
return project
.toBuilder()
.backing(backing)
.isBacking(true)
.build();
}
public static @NonNull Project backedProjectWithRewardLimited() {
final Project project = project();
final Reward reward = RewardFactory.limited();
final Backing backing = Backing.builder()
.amount(10.0f)
.backerId(IdFactory.id())
.id(IdFactory.id())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.pledgedAt(DateTime.now())
.projectCountry(project.country())
.projectId(project.id())
.shippingAmount(0.0f)
.status(Backing.STATUS_PLEDGED)
.build();
return project
.toBuilder()
.backing(backing)
.isBacking(true)
.build();
}
public static @NonNull Project backedProjectWithRewardLimitReached() {
final Project project = project();
final Reward reward = RewardFactory.limitReached();
final Backing backing = Backing.builder()
.amount(10.0f)
.backerId(IdFactory.id())
.id(IdFactory.id())
.sequence(1)
.reward(reward)
.rewardId(reward.id())
.pledgedAt(DateTime.now())
.projectCountry(project.country())
.projectId(project.id())
.shippingAmount(0.0f)
.status(Backing.STATUS_PLEDGED)
.build();
return project
.toBuilder()
.backing(backing)
.isBacking(true)
.build();
}
public static @NonNull Project halfWayProject() {
return project()
.toBuilder()
.name("halfwayProject")
.goal(100.0f)
.pledged(50.0f)
.build();
}
public static @NonNull Project allTheWayProject() {
return project()
.toBuilder()
.name("allTheWayProject")
.goal(100.0f)
.pledged(100.0f)
.build();
}
public static @NonNull Project doubledGoalProject() {
return project()
.toBuilder()
.name("doubledGoalProject")
.goal(100.0f)
.pledged(200.0f)
.build();
}
public static @NonNull Project failedProject() {
return project()
.toBuilder()
.name("failedProject")
.state(Project.STATE_FAILED)
.build();
}
public static @NonNull Project caProject() {
return project()
.toBuilder()
.name("caProject")
.country("CA")
.currencySymbol("$")
.currency("CAD")
.staticUsdRate(0.75f)
.build();
}
public static @NonNull Project ukProject() {
return project()
.toBuilder()
.name("ukProject")
.country("UK")
.currencySymbol("£")
.currency("GBP")
.staticUsdRate(1.5f)
.build();
}
public static @NonNull Project almostCompletedProject() {
return project()
.toBuilder()
.name("almostCompleteProject")
.deadline(new DateTime().plusDays(1))
.build();
}
public static @NonNull Project successfulProject() {
return project()
.toBuilder()
.name("successfulProject")
.deadline(new DateTime().minus(2))
.state(Project.STATE_SUCCESSFUL)
.build();
}
}