diff --git a/Kickstarter-iOS/Features/LoginTout/Controller/LoginToutViewController.swift b/Kickstarter-iOS/Features/LoginTout/Controller/LoginToutViewController.swift index 7208e2afb6..02151fa47d 100644 --- a/Kickstarter-iOS/Features/LoginTout/Controller/LoginToutViewController.swift +++ b/Kickstarter-iOS/Features/LoginTout/Controller/LoginToutViewController.swift @@ -187,12 +187,29 @@ public final class LoginToutViewController: UIViewController, MFMailComposeViewC self?.pushSignupViewController() } - self.viewModel.outputs.logIntoEnvironment + self.viewModel.outputs.logIntoEnvironmentWithApple .observeValues { [weak self] accessTokenEnv in AppEnvironment.login(accessTokenEnv) self?.viewModel.inputs.environmentLoggedIn() } + self.viewModel.outputs.logIntoEnvironmentWithFacebook + .observeValues { [weak self] accessTokenEnv in + guard let strongSelf = self else { return } + + AppEnvironment.login(accessTokenEnv) + + guard featureFacebookLoginDeprecationEnabled(), + let needsPassword = accessTokenEnv.user.needsPassword, + needsPassword else { + strongSelf.pushSetYourPasswordViewController() + + return + } + + strongSelf.viewModel.inputs.environmentLoggedIn() + } + self.viewModel.outputs.postNotification .observeForUI() .observeValues { @@ -241,10 +258,10 @@ public final class LoginToutViewController: UIViewController, MFMailComposeViewC self.helpViewModel.outputs.showMailCompose .observeForControllerAction() .observeValues { [weak self] in - guard let _self = self else { return } + guard let strongSelf = self else { return } let controller = MFMailComposeViewController.support() - controller.mailComposeDelegate = _self - _self.present(controller, animated: true, completion: nil) + controller.mailComposeDelegate = strongSelf + strongSelf.present(controller, animated: true, completion: nil) } self.helpViewModel.outputs.showNoEmailError @@ -407,6 +424,14 @@ public final class LoginToutViewController: UIViewController, MFMailComposeViewC self.navigationItem.backBarButtonItem = UIBarButtonItem.back(nil, selector: nil) } + private func pushSetYourPasswordViewController() { + let vc = SetYourPasswordViewController.instantiate() + vc.delegate = self + self.navigationController?.pushViewController(vc, animated: true) + self.navigationItem + .backBarButtonItem = UIBarButtonItem(title: "Log in", style: .plain, target: nil, action: nil) + } + fileprivate func showHelpSheet(helpTypes: [HelpType]) { let helpSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) @@ -573,6 +598,14 @@ extension LoginToutViewController: ASAuthorizationControllerDelegate { } } +// MARK: SetYourPasswordViewControllerDelegate + +extension LoginToutViewController: SetYourPasswordViewControllerDelegate { + func setPasswordCompleteAndLogUserIn() { + self.viewModel.inputs.environmentLoggedIn() + } +} + // MARK: - ASAuthorizationControllerPresentationContextProviding @available(iOS 13.0, *) diff --git a/Kickstarter-iOS/Features/PledgePaymentMethods/Views/Cells/PledgePaymentMethodAddCell.swift b/Kickstarter-iOS/Features/PledgePaymentMethods/Views/Cells/PledgePaymentMethodAddCell.swift index b1f20ca535..bb3aec6b74 100644 --- a/Kickstarter-iOS/Features/PledgePaymentMethods/Views/Cells/PledgePaymentMethodAddCell.swift +++ b/Kickstarter-iOS/Features/PledgePaymentMethods/Views/Cells/PledgePaymentMethodAddCell.swift @@ -55,6 +55,14 @@ final class PledgePaymentMethodAddCell: UITableViewCell, ValueCell { _ = ([self.activityIndicator, self.addButton], self.containerView) |> ksr_addArrangedSubviewsToStackView() + _ = (self.addButton, self.containerView) + |> ksr_constrainViewToEdgesInParent() + |> ksr_constrainViewToCenterInParent() + + _ = (self.activityIndicator, self.containerView) + |> ksr_constrainViewToEdgesInParent() + |> ksr_constrainViewToCenterInParent() + _ = (self.containerView, self.contentView) |> ksr_constrainViewToEdgesInParent() |> ksr_constrainViewToCenterInParent() diff --git a/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewController.swift b/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewController.swift index cbc5f791d2..6ced6b5cda 100644 --- a/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewController.swift +++ b/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewController.swift @@ -4,6 +4,10 @@ import Prelude import ReactiveSwift import UIKit +protocol SetYourPasswordViewControllerDelegate: AnyObject { + func setPasswordCompleteAndLogUserIn() +} + public final class SetYourPasswordViewController: UIViewController { // MARK: - Properties @@ -13,6 +17,11 @@ public final class SetYourPasswordViewController: UIViewController { private lazy var confirmPasswordLabel: UILabel = { UILabel(frame: .zero) }() private lazy var confirmPasswordTextField: UITextField = { UITextField(frame: .zero) |> \.tag .~ 1 }() + private lazy var loadingIndicator: UIActivityIndicatorView = { + UIActivityIndicatorView() + |> \.translatesAutoresizingMaskIntoConstraints .~ false + }() + private lazy var rootStackView = { UIStackView() }() private lazy var scrollView = { UIScrollView(frame: .zero) @@ -33,16 +42,7 @@ public final class SetYourPasswordViewController: UIViewController { }() private let viewModel: SetYourPasswordViewModelType = SetYourPasswordViewModel() - - // MARK: - Configuration - - public static func configuredWith( - userEmail: String - ) -> SetYourPasswordViewController { - let vc = SetYourPasswordViewController.instantiate() - vc.viewModel.inputs.configureWith(userEmail) - return vc - } + weak var delegate: SetYourPasswordViewControllerDelegate? // MARK: - Lifecycle @@ -60,6 +60,12 @@ public final class SetYourPasswordViewController: UIViewController { self.viewModel.inputs.viewDidLoad() } + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.viewModel.inputs.viewWillAppear() + } + // MARK: - Styles public override func bindStyles() { @@ -96,19 +102,39 @@ public final class SetYourPasswordViewController: UIViewController { // MARK: - Bind View Model public override func bindViewModel() { + super.bindViewModel() + + self.loadingIndicator.rac.animating = self.viewModel.outputs.shouldShowActivityIndicator self.contextLabel.rac.text = self.viewModel.outputs.contextLabelText self.newPasswordLabel.rac.text = self.viewModel.outputs.newPasswordLabel self.confirmPasswordLabel.rac.text = self.viewModel.outputs.confirmPasswordLabel self.saveButton.rac.enabled = self.viewModel.outputs.saveButtonIsEnabled + + self.viewModel.outputs.setPasswordFailure + .observeForControllerAction() + .observeValues { [weak self] errorMessage in + self?.present(UIAlertController.genericError(errorMessage), animated: true, completion: nil) + self?.enableTextFieldsAndSaveButton(true) + } + + self.viewModel.outputs.setPasswordSuccess + .observeForControllerAction() + .observeValues { [weak self] in + self?.delegate?.setPasswordCompleteAndLogUserIn() + } + + self.viewModel.outputs.textFieldsAndSaveButtonAreEnabled + .observeForUI() + .observeValues { [weak self] isEnabled in + self?.enableTextFieldsAndSaveButton(isEnabled) + } } // MARK: - Functions private func configureViews() { _ = self.view - |> \.autoresizingMask .~ .flexibleHeight |> \.backgroundColor .~ .ksr_white - |> \.clipsToBounds .~ true _ = (self.scrollView, self.view) |> ksr_addSubviewToParent() @@ -124,7 +150,8 @@ public final class SetYourPasswordViewController: UIViewController { self.newPasswordTextField, self.confirmPasswordLabel, self.confirmPasswordTextField, - self.saveButton + self.saveButton, + self.loadingIndicator ], self.rootStackView) |> ksr_addArrangedSubviewsToStackView() @@ -135,8 +162,11 @@ public final class SetYourPasswordViewController: UIViewController { private func setupConstraints() { NSLayoutConstraint.activate([ self.rootStackView.widthAnchor.constraint(equalTo: self.view.widthAnchor), + self.newPasswordTextField.heightAnchor.constraint(greaterThanOrEqualToConstant: 44), + self.confirmPasswordTextField.heightAnchor.constraint(greaterThanOrEqualToConstant: 44), + self.saveButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 48) ]) } @@ -149,6 +179,13 @@ public final class SetYourPasswordViewController: UIViewController { self.saveButton.addTarget(self, action: #selector(self.saveButtonPressed), for: .touchUpInside) } + private func enableTextFieldsAndSaveButton(_ isEnabled: Bool) { + _ = [self.newPasswordTextField, self.confirmPasswordTextField, self.saveButton] + ||> \.isUserInteractionEnabled .~ isEnabled + + self.saveButton.isHidden = !isEnabled + } + // MARK: - Accessors @objc private func dismissKeyboard() { diff --git a/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewControllerTests.swift b/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewControllerTests.swift index 2da1fa25d8..d7cf775dba 100644 --- a/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewControllerTests.swift +++ b/Kickstarter-iOS/Features/SetYourPassword/Controller/SetYourPasswordViewControllerTests.swift @@ -7,16 +7,24 @@ import XCTest final class SetYourPasswordViewControllerTests: TestCase { override func setUp() { super.setUp() - AppEnvironment.pushEnvironment(mainBundle: Bundle.framework) UIView.setAnimationsEnabled(false) } - func testView() { - combos([Language.en], [Device.phone4_7inch, Device.pad]).forEach { + override func tearDown() { + AppEnvironment.popEnvironment() + super.tearDown() + } + + func testSetYourPasswordViewController_DisabledSave() { + let userTemplate = GraphUser.template |> \.isEmailVerified .~ true + let userEnvelope = UserEnvelope(me: userTemplate) + let service = MockService(fetchGraphUserResult: .success(userEnvelope)) + + combos(Language.allLanguages, [Device.phone4_7inch, Device.pad]).forEach { language, device in - withEnvironment(language: language) { - let controller = SetYourPasswordViewController.configuredWith(userEmail: "abc******@gmail.com") + withEnvironment(apiService: service, apiDelayInterval: .seconds(0), language: language) { + let controller = SetYourPasswordViewController.instantiate() let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller) self.scheduler.run() @@ -25,10 +33,4 @@ final class SetYourPasswordViewControllerTests: TestCase { } } } - - override func tearDown() { - AppEnvironment.popEnvironment() - UIView.setAnimationsEnabled(true) - super.tearDown() - } } diff --git a/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings b/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings index 1cff1e1012..b2ce348c11 100644 --- a/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings @@ -323,6 +323,7 @@ "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life" = "Kickstarter is not a store. It's a way to bring creative projects to life."; "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life_Learn_more_about_accountability" = "Kickstarter is not a store. It's a way to bring creative projects to life.
Learn more about accountability"; "Kickstarter_on_Film" = "Kickstarter on Film"; +"Kickstarters_community_guidelines" = "Kickstarter’s Community Guidelines."; "Know_when_creators_and_backers_message_you" = "Know when creators and backers message you by enabling notifications."; "Learn_about_accountability_on_Kickstarter" = "Learn about accountability on Kickstarter"; "Learn_more_about_accountability" = "Learn more about accountability"; @@ -499,6 +500,7 @@ "Request_my_personal_data" = "Request my personal data"; "Resend_email" = "Resend email"; "Resend_verification_email" = "Re-send verification email"; +"Reset_your_password" = "Reset your password"; "Retry" = "Retry"; "Retry_or_select_another_method" = "Retry or select another method."; "Reusability_and_recyclability" = "Reusability and recyclability"; @@ -555,6 +557,8 @@ "Selected_reward" = "Selected reward"; "Send" = "Send"; "Send_verfication_email" = "Send verification email"; +"Set_new_password" = "Set new password"; +"Set_your_password" = "Set your password"; "Share" = "Share"; "Share_an_update_about_your_project" = "Share an update about your project…"; "Share_this_live_stream" = "Share this live stream."; @@ -633,6 +637,9 @@ "These_projects_could_use_your_support" = "These projects could use your support."; "This_allows_you_to_see_project_goal_and_pledge_amounts_in_your_preferred_currency" = "This allows you to see project goal and pledge amounts in your preferred currency."; "This_comment_has_been_removed_by_Kickstarter" = "This comment has been removed by Kickstarter."; +"This_comment_is_under_review" = "This comment is under review."; +"This_comment_is_under_review_for_potentially_violating" = "This comment is under review for potentially violating"; +"This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines" = "This comment is under review for potentially violating Kickstarter’s Community Guidelines."; "This_facebook_account_is_already_linked_to_another_Kickstarter_user" = "This Facebook account is already linked to another Kickstarter user."; "This_holiday_season_support_a_project_for_no_reward" = "This holiday season, support a project for no reward, just because it speaks to you."; "This_person_canceled_their_pledge" = "This person has canceled their pledge."; @@ -690,6 +697,7 @@ "Visit_our_Environmental_Resources_Center" = "Visit our Environmental Resources Center"; "Visit_our_Environmental_Resources_Center_Alternative" = "Visit our Environmental Resources Center"; "Watch_live" = "Watch live"; +"We_can_no_longer_log_you_in_through_Facebook" = "We can no longer log you in through Facebook. Please log in with your Kickstarter password, or set a new password with your Facebook email."; "We_cant_process_this_pledge_because_of_a_problem_with_the_backers_payment_method" = "We can’t process this pledge because of a problem with the backer’s payment method."; "We_cant_process_your_pledge" = "We can't process your pledge."; "We_cant_process_your_pledge_Please_update_your_payment_method" = "We can’t process your pledge. Please update your payment method."; @@ -701,11 +709,13 @@ "We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours" = "We don’t allow cancelations that will cause a project to fall short of its goal within the last 24 hours."; "We_re_processing_this_pledge_pull_to_refresh" = "We're processing this pledge—pull to refresh."; "We_re_processing_your_pledge_pull_to_refresh" = "We're processing your pledge—pull to refresh."; +"We_re_simplifying_our_login_process_To_log_in" = "We’re simplifying our login process. To access your Kickstarter account, enter the email associated to your Facebook account and we’ll send you a link to set a password"; "We_think_youll_like_these_too" = "We think you’ll like these, too"; "We_use_your_activity_internally_to_make_recommendations_for_you" = "We use your activity internally to make recommendations for you. Turn recommendations off to opt out of this."; "We_ve_been_unable_to_send_email" = "We've been unable to send email to this address. Please make sure it is typed correctly."; "We_were_unable_to_connect_to_the_live_stream_chat" = "We were unable to connect to the live stream chat."; "We_were_unable_to_load_the_shipping_destinations" = "We were unable to load the shipping destinations.\nPlease try again later."; +"We_will_be_discontinuing_the_ability_to_log_in_via_Facebook" = "We will be discontinuing the ability to log in via Facebook. To log in to your account using the email %{email}, please set a password that's at least 6 characters long."; "We_wont_share_this_with_the_creator" = "We won’t share this with the creator."; "Websites" = "Websites"; "Welcome_to_our_library_Peruse_the_stacks_with_us" = "Welcome to our library. Peruse the stacks with us."; @@ -1313,6 +1323,7 @@ "forgot_password.placeholder_email" = "Email address"; "forgot_password.title" = "Forgot your password?"; "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_reset_your_password" = "We’ve sent an email to %{email} with instructions to reset your password."; +"forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password" = "We’ve sent an email to %{email} with instructions to set your password."; "general.accessibility.kickstarter" = "Kickstarter"; "general.alert.buttons.ok" = "OK"; "general.backer_count_backers.few" = "%{backer_count} backers"; diff --git a/Kickstarter-iOS/Locales/de.lproj/Localizable.strings b/Kickstarter-iOS/Locales/de.lproj/Localizable.strings index 2acfcf7ece..ecd2e3600d 100644 --- a/Kickstarter-iOS/Locales/de.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/de.lproj/Localizable.strings @@ -52,7 +52,7 @@ "Back_this_project" = "Projekt unterstützen"; "Back_this_project_below" = "Folgendes Projekt unterstützen"; "Backed_by_Friends" = "Von Freunden unterstützt"; -"Backed_by_people_you_follow" = "Unterstützt von deinen Freunden"; +"Backed_by_people_you_follow" = "Unterstützt von Personen, denen du folgst"; "Backed_projects_projects_count" = "Unterstützte Projekte: %{project_count}"; "Backer_has_pledged_to_this_project" = "Hat dieses Projekt unterstützt."; "Backers_count_separator_backers.few" = "%{backers_count}\nUnterstützer"; @@ -243,9 +243,9 @@ "Follow_more_friends" = "Folge noch mehr Freunden"; "Follow_your_Facebook_friends_and_get_notified" = "Folge deinen Freunden und wir werden dich benachrichtigen, sobald sie ein Projekt unterstützen oder veröffentlichen."; "Follow_your_Facebook_friends_and_keep_up_with_the_projects" = "Folge deinen Facebook-Freunden - wir halten dich auf dem Laufenden, wenn sie ein Projekt unterstützen oder veröffentlichen."; -"Followed" = "Abonniert"; -"Following" = "Abonniert"; -"Following_Disabled_Info" = "Die Funktion \"Abonnieren\" muss aktiviert sein, um Freunde auf Facebook zu finden. Gehe dazu zu Einstellungen > Datenschutz."; +"Followed" = "Gefolgt"; +"Following" = "Gefolgt"; +"Following_Disabled_Info" = "Die Funktion „Folgen“ muss aktiviert sein, um Freunde auf Facebook zu finden. Gehe dazu zu Einstellungen > Datenschutz."; "Following_More_Info" = "Mehr Info zu Folgen"; "Follows_friend_name" = "%{friend_name} folgen."; "Frequently_asked_questions" = "Häufige Fragen"; @@ -323,6 +323,7 @@ "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life" = "Kickstarter ist kein Geschäft, sondern eine Plattform, um kreative Projekte zu verwirklichen."; "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life_Learn_more_about_accountability" = "Kickstarter ist kein Geschäft, sondern eine Plattform, um kreative Projekte zu verwirklichen.
Hier findest du mehr Info zur Rechenschftspflicht"; "Kickstarter_on_Film" = "Kickstarter on Film"; +"Kickstarters_community_guidelines" = "Kickstarter’s Community Guidelines."; "Know_when_creators_and_backers_message_you" = "Aktiviere Benachrichtigungen, damit du über eingehende Nachrichten von Projektgründern und Unterstützern Bescheid weißt."; "Learn_about_accountability_on_Kickstarter" = "Näheres zur Rechenschaftspflicht auf Kickstarter"; "Learn_more_about_accountability" = "Weitere Informationen zur Rechenschaftspflicht"; @@ -392,7 +393,7 @@ "No_unread_messages" = "Keine ungelesenen Nachrichten"; "Not_available" = "Nicht verfügbar"; "Not_delivered" = "Nicht verschickt"; -"Not_followed" = "Nicht abonniert"; +"Not_followed" = "Nicht gefolgt"; "Not_now" = "Nicht jetzt"; "Notification_email_notification_off" = "%{notification}, Benachrichtigung per E-Mail, Aus"; "Notification_email_notification_on" = "%{notification}, Benachrichtigung per E-Mail, An"; @@ -499,6 +500,7 @@ "Request_my_personal_data" = "Meine persönlichen Daten anfordern"; "Resend_email" = "Erneut senden"; "Resend_verification_email" = "Verifizierungs-E-Mail erneut senden"; +"Reset_your_password" = "Passwort zurücksetzen"; "Retry" = "Erneut versuchen"; "Retry_or_select_another_method" = "Versuche es erneut oder wähle eine andere Karte."; "Reusability_and_recyclability" = "Wiederverwertung und Recyclingfähigkeit"; @@ -555,6 +557,8 @@ "Selected_reward" = "Gewählte Belohnung"; "Send" = "Senden"; "Send_verfication_email" = "Verifizeirungs-E-Mail senden"; +"Set_new_password" = "Neues Passwort festlegen"; +"Set_your_password" = "Passwort festlegen"; "Share" = "Teilen"; "Share_an_update_about_your_project" = "Teile einen Update zu deinem Projekt …"; "Share_this_live_stream" = "Live-Stream teilen."; @@ -633,6 +637,9 @@ "These_projects_could_use_your_support" = "Diese Projekte könnten mit deiner Unterstützung verwirklicht werden."; "This_allows_you_to_see_project_goal_and_pledge_amounts_in_your_preferred_currency" = "Hier kannst du das Finanzierungsziel und die Finanzierungsbeiträge in deiner bevorzugten Währung ansehen."; "This_comment_has_been_removed_by_Kickstarter" = "Dieser Kommentar wurde von Kickstarter entfernt."; +"This_comment_is_under_review" = "Dieser Kommentar wird gerade überprüft."; +"This_comment_is_under_review_for_potentially_violating" = "This comment is under review for potentially violating"; +"This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines" = "Dieser Kommentar wird gerade geprüft, weil er möglicherweise gegen die Community-Richtlinien von Kickstarter verstößt."; "This_facebook_account_is_already_linked_to_another_Kickstarter_user" = "Dieses Facebook-Konto ist bereits einem anderen Kickstarter-Nutzer zugeordnet."; "This_holiday_season_support_a_project_for_no_reward" = "Weihnachten steht kurz vor der Tür - unterstütze ein Projekt ohne Belohnung. Einfach, weil es dich anspricht."; "This_person_canceled_their_pledge" = "Diese Person hat ihren Finanzierungsbeitrag zurückgezogen."; @@ -690,6 +697,7 @@ "Visit_our_Environmental_Resources_Center" = "Ressourcen für den Umweltschutz"; "Visit_our_Environmental_Resources_Center_Alternative" = "Ressourcen für den Umweltschutz"; "Watch_live" = "Live ansehen"; +"We_can_no_longer_log_you_in_through_Facebook" = "Wir können dich nicht mehr über Facebook anmelden. Bitte melde dich mit deinem Kickstarter-Passwort an oder leg für deine Facebook-E-Mail-Adresse ein neues Passwort fest."; "We_cant_process_this_pledge_because_of_a_problem_with_the_backers_payment_method" = "Dieser Finanzierungsbeitrag konnte aufgrund eines Problems mit der Zahlungsmethode des Unterstützers nicht bearbeitet werden."; "We_cant_process_your_pledge" = "Wir können deine Zahlung leider nicht bearbeiten."; "We_cant_process_your_pledge_Please_update_your_payment_method" = "Dein Finanzierungsbeitrag kann nicht bearbeitet werden. Bitte aktualisiere deine Zahlungsmethode."; @@ -701,11 +709,13 @@ "We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours" = "Es ist nicht gestattet, innerhalb der letzten 24 Stunden vor Beendigung eines Projekts einen Finanzierungsbeitrag zurückzuziehen, wenn dadurch das Finanzierungsziel nicht mehr erreicht werden würde."; "We_re_processing_this_pledge_pull_to_refresh" = "Der Finanzierungsbeitrag wird derzeit bearbeitet — zur Aktualisierung nach unten ziehen."; "We_re_processing_your_pledge_pull_to_refresh" = "Dein Finanzierungsbeitrag wird derzeit bearbeitet — zur Aktualisierung nach unten ziehen."; +"We_re_simplifying_our_login_process_To_log_in" = "Wir vereinfachen unseren Anmeldeprozess. Wenn du auf dein Kickstarter-Konto zugreifen möchtest, gib die E-Mail-Adresse ein, die mit deinem Facebook-Konto verknüpft ist. Wir senden dir dann einen Link, über den du ein Passwort festlegen kannst"; "We_think_youll_like_these_too" = "Wir denken, diese Projekte könnten dir auch gefallen"; "We_use_your_activity_internally_to_make_recommendations_for_you" = "Deine Aktivitäten werden intern genutzt, um dir Empfehlungen zu unterbreiten. Um dies zu deaktivieren, wähle \"Empfehlungen\" einfach ab."; "We_ve_been_unable_to_send_email" = "Wir konnten keine E-Mails an diese Adresse senden. Bitte prüfe, ob sie richtig eingegeben wurde."; "We_were_unable_to_connect_to_the_live_stream_chat" = "Es konnte leider keine Verbindung zum Chat des Live-Streams hergestellt werden."; "We_were_unable_to_load_the_shipping_destinations" = "Das Laden der Versandadressen war leider nicht möglich.\nBitte versuche es später noch einmal."; +"We_will_be_discontinuing_the_ability_to_log_in_via_Facebook" = "Wir werden die Anmeldung über Facebook einstellen. Um dich mit der E-Mail-Adresse %{email} in deinem Konto anzumelden, leg bitte ein Passwort fest, das mindestens 6 Zeichen lang ist."; "We_wont_share_this_with_the_creator" = "Diese Information wird nicht mit dem Projektgründer geteilt."; "Websites" = "Webseiten"; "Welcome_to_our_library_Peruse_the_stacks_with_us" = "Willkommen in unserer Bibliothek. Viel Spaß beim Stöbern."; @@ -713,7 +723,7 @@ "Well_help_you_find_a_project_to_back" = "Wir helfen dir dabei, Projekte nach deinem Geschmack zu finden."; "Well_import_your_name_and_profile_photo_and_access_your_friend_list" = "Wir importieren deinen Namen und dein Profilfoto und können auf die Liste deiner Freunde zugreifen. Wir werden jedoch niemals etwas ohne deine Zustimmung posten."; "Well_remind_you_forty_eight_hours_before_this_project_ends" = "Wir werden dir 48 Stunden vor Ablauf dieses Projekts eine Benachrichtigung senden, sowie für alle Projekte, die du in Zukunft speicherst. Um alle gespeicherten Projekte anzusehen, gehe bitte zu deiner Profilseite."; -"When_following_is_on_you_can_follow_the_acticity_of_others" = "Wenn die Funktion Folgen gewählt wurde, kannst du die Aktivitäten von anderen einsehen und diese sehen deine Aktivitäten. Wenn die Funktion abgewählt wurde, werden diese Daten endgültig gelöscht."; +"When_following_is_on_you_can_follow_the_acticity_of_others" = "Wenn die Funktion Folgen aktiviert wurde, kannst du die Aktivitäten von anderen einsehen und diese sehen deine Aktivitäten. Wenn die Funktion deaktiviert wurde, werden diese Daten endgültig gelöscht."; "When_you_save_a_project_we_ll_send_you_a_reminder" = "Wenn du ein Projekt speicherst, senden wir dir 48 Stunden vor Ablauf eine Erinnerungs-E-Mail"; "Which_categories_interest_you" = "Welche Kategorien interessieren dich?"; "Working_on_it" = "Working on it"; @@ -822,7 +832,7 @@ "activity.empty_state.logged_out.button" = "Projekte entdecken"; "activity.empty_state.logged_out.message" = "Wenn du ein Projekt unterstützt oder einem Freund folgst, werden diese Aktivitäten hier angezeigt."; "activity.empty_state.logged_out.title" = "Noch keine Aktivitäten"; -"activity.follow_back" = "Ihm/ihr auch folgen?"; +"activity.follow_back" = "Auch folgen?"; "activity.friend_backed_art_project" = "%{friend_name} hat ein Kunst-Projekt unterstützt."; "activity.friend_backed_comics_project" = "%{friend_name} hat ein Comics-Projekt unterstützt."; "activity.friend_backed_crafts_project" = "%{friend_name} hat ein Kunsthandwerk-Projekt unterstützt."; @@ -840,7 +850,7 @@ "activity.friend_backed_tech_project" = "%{friend_name} hat ein Technologie-Projekt unterstützt."; "activity.friend_backed_theater_project" = "%{friend_name} hat ein Theater-Projekt unterstützt."; "activity.friend_follow.buttons.follow" = "Folgen"; -"activity.friend_follow.buttons.following" = "Abonniert"; +"activity.friend_follow.buttons.following" = "Gefolgt"; "activity.friend_follow.is_following_you" = "folgt dir!"; "activity.funding_canceled" = "Finanzierung abgebrochen."; "activity.navigation.title.activity" = "Aktivität"; @@ -1313,6 +1323,7 @@ "forgot_password.placeholder_email" = "E-Mail-Adresse"; "forgot_password.title" = "Passwort vergessen?"; "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_reset_your_password" = "Wir haben eine E-Mail mit einer Anleitung zum Zurücksetzen deines Passworts an %{email} geschickt."; +"forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password" = "Wir haben eine E-Mail mit einer Anleitung zum Festlegen deines Passworts an %{email} geschickt."; "general.accessibility.kickstarter" = "Kickstarter"; "general.alert.buttons.ok" = "OK"; "general.backer_count_backers.few" = "%{backer_count} Unterstützer"; @@ -1715,7 +1726,7 @@ "social.update_sequence_and_title" = "Aktualisierung %{update_number}: %{update_title}"; "social_following.button.check_out_some_projects" = "Schau dir diese Projekte an!"; "social_following.friend.buttons.follow" = "Folgen"; -"social_following.friend.buttons.following" = "Abonniert"; +"social_following.friend.buttons.following" = "Gefolgt"; "social_following.friend.projects_count_backed.few" = "%{backed_count} unterstützt"; "social_following.friend.projects_count_backed.many" = "%{backed_count} unterstützt"; "social_following.friend.projects_count_backed.one" = "1 unterstützt"; diff --git a/Kickstarter-iOS/Locales/es.lproj/Localizable.strings b/Kickstarter-iOS/Locales/es.lproj/Localizable.strings index 06326439bd..dcb2f3dfb5 100644 --- a/Kickstarter-iOS/Locales/es.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/es.lproj/Localizable.strings @@ -323,6 +323,7 @@ "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life" = "Kickstarter no es una tienda. Es una forma de dar vida a proyectos creativos."; "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life_Learn_more_about_accountability" = "Kickstarter no es una tienda. Es una forma de dar vida a proyectos creativos.
Más información sobre las responsabilidades"; "Kickstarter_on_Film" = "Kickstarter on Film"; +"Kickstarters_community_guidelines" = "Kickstarter’s Community Guidelines."; "Know_when_creators_and_backers_message_you" = "Entérate cuando los creadores y patrocinadores te envíen mensajes habilitando las notificaciones."; "Learn_about_accountability_on_Kickstarter" = "Más información sobre el concepto de responsabilidad en Kickstarter"; "Learn_more_about_accountability" = "Más información sobre las responsabilidades"; @@ -499,6 +500,7 @@ "Request_my_personal_data" = "Solicitar mis datos personales"; "Resend_email" = "Reenviar correo"; "Resend_verification_email" = "Volver a enviar correo electrónico de verificación"; +"Reset_your_password" = "Restablece tu contraseña"; "Retry" = "Volver a intentar"; "Retry_or_select_another_method" = "Vuelve a intentarlo o selecciona otro método."; "Reusability_and_recyclability" = "Reutilización y reciclabilidad"; @@ -555,6 +557,8 @@ "Selected_reward" = "Recompensa seleccionada"; "Send" = "Enviar"; "Send_verfication_email" = "Enviar correo de verificación"; +"Set_new_password" = "Configurar nueva contraseña"; +"Set_your_password" = "Configura tu contraseña"; "Share" = "Compartir"; "Share_an_update_about_your_project" = "Comparte una actualización de tu proyecto …"; "Share_this_live_stream" = "Compartir este Live-Stream."; @@ -633,6 +637,9 @@ "These_projects_could_use_your_support" = "A estos proyectos les vendría bien tu apoyo."; "This_allows_you_to_see_project_goal_and_pledge_amounts_in_your_preferred_currency" = "Esto te permite ver la meta del proyecto y los montos de las contribuciones en la moneda de tu preferencia."; "This_comment_has_been_removed_by_Kickstarter" = "Este comentario ha sido eliminado por Kickstarter."; +"This_comment_is_under_review" = "Este comentario está en revisión."; +"This_comment_is_under_review_for_potentially_violating" = "This comment is under review for potentially violating"; +"This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines" = "Este comentario está en revisión por una posible infracción de las Reglas de la comunidad de Kickstarter."; "This_facebook_account_is_already_linked_to_another_Kickstarter_user" = "Esta cuenta de Facebook ya está asociada a otro usuario de Kickstarter."; "This_holiday_season_support_a_project_for_no_reward" = "Esta temporada de fiestas, apoya un proyecto sin recompensa, simplemente porque te resulta interesante."; "This_person_canceled_their_pledge" = "Esta persona canceló su contribución."; @@ -690,6 +697,7 @@ "Visit_our_Environmental_Resources_Center" = "Visita nuestro Centro de recursos medioambientales"; "Visit_our_Environmental_Resources_Center_Alternative" = "Visita nuestro Centro de recursos medioambientales"; "Watch_live" = "Ver en vivo"; +"We_can_no_longer_log_you_in_through_Facebook" = "Ya no admitimos el inicio de sesión a través de Facebook. Inicia sesión con tu contraseña de Kickstarter o configura una nueva contraseña con tu correo electrónico de Facebook."; "We_cant_process_this_pledge_because_of_a_problem_with_the_backers_payment_method" = "No podemos procesar esta contribución por un problema con el método de pago del patrocinador."; "We_cant_process_your_pledge" = "No podemos procesar tu contribución."; "We_cant_process_your_pledge_Please_update_your_payment_method" = "No podemos procesar la contribución. Por favor actualiza tu método de pago."; @@ -701,11 +709,13 @@ "We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours" = "No permitimos cancelaciones que ocasionen que un proyecto no alcance su meta en las últimas 24 horas."; "We_re_processing_this_pledge_pull_to_refresh" = "Estamos procesando la contribución, desliza para actualizar."; "We_re_processing_your_pledge_pull_to_refresh" = "Estamos procesando tu actualización, desliza para actualizar."; +"We_re_simplifying_our_login_process_To_log_in" = "Simplificaremos el proceso de inicio de sesión. Para acceder a tu cuenta de Kickstarter, escribe el correo electrónico asociado a tu cuenta de Facebook y te enviaremos un enlace para configurar una contraseña."; "We_think_youll_like_these_too" = "¡Te van a encantar, también!"; "We_use_your_activity_internally_to_make_recommendations_for_you" = "Utilizamos tu actividad internamente para hacerte recomendaciones. Desactiva las recomendaciones si no quieres recibirlas."; "We_ve_been_unable_to_send_email" = "No pudimos enviar el correo electrónico a esta dirección. Asegúrate de que esté escrita correctamente."; "We_were_unable_to_connect_to_the_live_stream_chat" = "No se pudo conectar al chat de live stream."; "We_were_unable_to_load_the_shipping_destinations" = "No se pudieron cargar los destinos de envío.\nPor favor inténtalo de nuevo más tarde."; +"We_will_be_discontinuing_the_ability_to_log_in_via_Facebook" = "Descontinuaremos la posibilidad de iniciar sesión a través de Facebook. Para iniciar sesión en tu cuenta con el correo electrónico %{email}, configura una contraseña que tenga al menos seis caracteres."; "We_wont_share_this_with_the_creator" = "No lo compartiremos con el creador."; "Websites" = "Sitios web"; "Welcome_to_our_library_Peruse_the_stacks_with_us" = "Bienvenidos a nuestra biblioteca. Descubre montones de libros con nosotros."; @@ -1313,6 +1323,7 @@ "forgot_password.placeholder_email" = "Dirección de correo electrónico"; "forgot_password.title" = "¿Olvidaste tu contraseña?"; "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_reset_your_password" = "Hemos enviado un correo electrónico a %{email} con las instrucciones para restablecer tu contraseña."; +"forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password" = "Hemos enviado un correo electrónico a %{email} con las instrucciones para configurar tu contraseña."; "general.accessibility.kickstarter" = "Kickstarter"; "general.alert.buttons.ok" = "OK"; "general.backer_count_backers.few" = "%{backer_count} patrocinadores"; diff --git a/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings b/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings index 8224496d1c..0adea7db33 100644 --- a/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings @@ -323,6 +323,7 @@ "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life" = "Kickstarter n'est pas un magasin, mais un moyen de faire vivre des projets créatifs."; "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life_Learn_more_about_accountability" = "Kickstarter n'est pas un magasin, mais un moyen de faire vivre des projets créatifs.
En savoir plus sur la notion de responsabilité"; "Kickstarter_on_Film" = "Kickstarter on Film"; +"Kickstarters_community_guidelines" = "Kickstarter’s Community Guidelines."; "Know_when_creators_and_backers_message_you" = "Activez vos notifications pour savoir quand un créateur ou un contributeur vous envoie un message."; "Learn_about_accountability_on_Kickstarter" = "En savoir plus sur la notion de responsabilité sur Kickstarter"; "Learn_more_about_accountability" = "En savoir plus sur la responsabilité"; @@ -499,6 +500,7 @@ "Request_my_personal_data" = "Demander mes données personnelles"; "Resend_email" = "Renvoyer"; "Resend_verification_email" = "Renvoyer l'e-mail de vérification"; +"Reset_your_password" = "Réinitialiser votre mot de passe"; "Retry" = "Réessayer"; "Retry_or_select_another_method" = "Veuillez réessayer ou choisir un autre moyen de paiement."; "Reusability_and_recyclability" = "Recyclage et valorisation des déchets"; @@ -555,6 +557,8 @@ "Selected_reward" = "Récompense sélectionnée"; "Send" = "Envoyer"; "Send_verfication_email" = "Envoyer un e-mail de vérification"; +"Set_new_password" = "Création d'un mot de passe"; +"Set_your_password" = "Veuillez créer un mot de passe"; "Share" = "Partager"; "Share_an_update_about_your_project" = "Parlez de votre projet dans une actu."; "Share_this_live_stream" = "Partager cette diffusion en direct."; @@ -633,6 +637,9 @@ "These_projects_could_use_your_support" = "Ces créateurs ont besoin de vous."; "This_allows_you_to_see_project_goal_and_pledge_amounts_in_your_preferred_currency" = "L'objectif du projet et les montants des engagements s'afficheront ainsi dans la devise de votre choix."; "This_comment_has_been_removed_by_Kickstarter" = "Ce commentaire a été supprimé par Kickstarter."; +"This_comment_is_under_review" = "Ce commentaire est en cours de vérification."; +"This_comment_is_under_review_for_potentially_violating" = "This comment is under review for potentially violating"; +"This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines" = "Ce commentaire est en cours d'examen pour manquement possible aux Règles de bonne conduite de Kickstarter."; "This_facebook_account_is_already_linked_to_another_Kickstarter_user" = "Ce compte Facebook est déjà relié à un autre utilisateur Kickstarter."; "This_holiday_season_support_a_project_for_no_reward" = "Pour les fêtes, soutenez un projet simplement parce qu'il vous parle, sans choisir de récompense."; "This_person_canceled_their_pledge" = "Cette personne a annulé son engagement."; @@ -690,6 +697,7 @@ "Visit_our_Environmental_Resources_Center" = "Rendez-vous dans notre Centre de ressources pour l'environnement"; "Visit_our_Environmental_Resources_Center_Alternative" = "Consultez notre Centre de ressources pour l'environnement"; "Watch_live" = "Regarder en direct"; +"We_can_no_longer_log_you_in_through_Facebook" = "La connexion Facebook est désormais impossible. Veuillez vous connecter avec votre mot de passe Kickstarter, ou créer un autre mot de passe pour votre adresse Facebook."; "We_cant_process_this_pledge_because_of_a_problem_with_the_backers_payment_method" = "Impossible de traiter cet engagement en raison d'un problème survenu au niveau du moyen de paiement du contributeur."; "We_cant_process_your_pledge" = "Impossible de traiter votre engagement."; "We_cant_process_your_pledge_Please_update_your_payment_method" = "Impossible de traiter votre engagement. Veuillez mettre à jour votre moyen de paiement."; @@ -701,11 +709,13 @@ "We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours" = "Les annulations qui empêcheraient le créateur d'atteindre son objectif de financement sont interdits dans les dernières 24 heures de la campagne."; "We_re_processing_this_pledge_pull_to_refresh" = "Cet engagement est en cours de traitement, veuillez tirer sur la page pour actualiser."; "We_re_processing_your_pledge_pull_to_refresh" = "Votre engagement est en cours de traitement, veuillez tirer sur la page pour actualiser."; +"We_re_simplifying_our_login_process_To_log_in" = "Notre procédure de connexion est en cours de simplification. Pour accéder à votre compte Kickstarter, saisissez l'adresse e-mail associée à votre compte Facebook et nous vous enverrons un lien de réinitialisation."; "We_think_youll_like_these_too" = "D'autres projets qui pourraient vous plaire"; "We_use_your_activity_internally_to_make_recommendations_for_you" = "À l'interne, nous nous servons de vos activités pour vous faire des recommandations. Si vous ne souhaitez pas participer, nous vous invitons à désactiver vos recommandations."; "We_ve_been_unable_to_send_email" = "Échec de l'envoi. Veuillez vérifier l'orthographe de votre adresse e-mail."; "We_were_unable_to_connect_to_the_live_stream_chat" = "Connexion au chat en direct impossible."; "We_were_unable_to_load_the_shipping_destinations" = "Nous n'avons pas été en mesure de charger les destinations d'expédition.\nVeuillez réessayer ultérieurement."; +"We_will_be_discontinuing_the_ability_to_log_in_via_Facebook" = "La fonctionnalité de connexion avec Facebook va être éliminée. Pour vous connecter à votre compte avec l'adresse %{email}, veuillez créer un mot de passe qui contient au moins 6 caractères."; "We_wont_share_this_with_the_creator" = "Le créateur ne verra pas votre réponse."; "Websites" = "Sites Web"; "Welcome_to_our_library_Peruse_the_stacks_with_us" = "Bienvenue dans notre bibliothèque. Flânons ensemble parmi ses rayons."; @@ -1313,6 +1323,7 @@ "forgot_password.placeholder_email" = "Adresse e-mail"; "forgot_password.title" = "Mot de passe oublié ?"; "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_reset_your_password" = "Nous avons envoyé un e-mail à %{email} contenant les instructions nécessaires pour réinitialiser votre mot de passe."; +"forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password" = "Nous avons envoyé un e-mail à %{email} contenant les instructions nécessaires pour définir votre mot de passe."; "general.accessibility.kickstarter" = "Kickstarter"; "general.alert.buttons.ok" = "OK"; "general.backer_count_backers.few" = "%{backer_count} contributeurs"; diff --git a/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings b/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings index efa5c32bf0..f408f8c05c 100644 --- a/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings @@ -323,6 +323,7 @@ "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life" = "Kickstarter は普通のお店とは全く違います。クリエイティブなプロジェクトに生命を吹き込む場です。"; "Kickstarter_is_not_a_store_Its_a_way_to_bring_creative_projects_to_life_Learn_more_about_accountability" = "Kickstarter は普通のお店とは全く違います。クリエイティブなプロジェクトに生命を吹き込む場です。
アカウンタビリティについて詳しくみる。"; "Kickstarter_on_Film" = "Kickstarter on Film"; +"Kickstarters_community_guidelines" = "Kickstarter’s Community Guidelines."; "Know_when_creators_and_backers_message_you" = "クリエイターやバッカ―からメッセージが届いた場合にすぐ分かるように、通知機能を有効にしましょう。"; "Learn_about_accountability_on_Kickstarter" = "Kickstarter上の説明責任について詳しく知る"; "Learn_more_about_accountability" = "報告義務に関してさらに詳しく"; @@ -499,6 +500,7 @@ "Request_my_personal_data" = "自分の個人データをリクエストする"; "Resend_email" = "メールを再送"; "Resend_verification_email" = "認証メールをもう一度送信"; +"Reset_your_password" = "パスワードをリセット"; "Retry" = "もう一度試す"; "Retry_or_select_another_method" = "再試行するか別のお支払い方法を選択してください。"; "Reusability_and_recyclability" = "再利用可能性とリサイクル可能性"; @@ -555,6 +557,8 @@ "Selected_reward" = "選択したリワード"; "Send" = "送信"; "Send_verfication_email" = "認証メールを送信する"; +"Set_new_password" = "新しいパスワードを設定"; +"Set_your_password" = "パスワードを設定"; "Share" = "シェア"; "Share_an_update_about_your_project" = "アップデートをシェアしよう"; "Share_this_live_stream" = "ライブ配信をシェアする"; @@ -633,6 +637,9 @@ "These_projects_could_use_your_support" = "こちらのプロジェクト達があなたのサポートを待っています!"; "This_allows_you_to_see_project_goal_and_pledge_amounts_in_your_preferred_currency" = "これにより、プロジェクトのファンディングゴールとプレッジ金額をご希望の通貨で表示することができます。"; "This_comment_has_been_removed_by_Kickstarter" = "このコメントは Kickstarter によって削除されました。"; +"This_comment_is_under_review" = "このコメントは現在審査中です。"; +"This_comment_is_under_review_for_potentially_violating" = "This comment is under review for potentially violating"; +"This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines" = "このコメントは Kickstarter のコミュニティガイドラインに違反している可能性があるとして現在審査中です。"; "This_facebook_account_is_already_linked_to_another_Kickstarter_user" = "このFacebookアカウントはすでに他のKickstarterユーザーとつながっています"; "This_holiday_season_support_a_project_for_no_reward" = "このホリデーシーズンはぜひ、リワード無しでも「支援したい!」と思わせてくれるような、あなたの心に訴えかけるプロジェクトをサポートしてみませんか?"; "This_person_canceled_their_pledge" = "このユーザーはプレッジをキャンセルしました。"; @@ -690,6 +697,7 @@ "Visit_our_Environmental_Resources_Center" = "Kickstarter の環境リソースセンターにアクセス"; "Visit_our_Environmental_Resources_Center_Alternative" = "Kickstarter の環境リソースセンターにアクセス"; "Watch_live" = "ライブをみる"; +"We_can_no_longer_log_you_in_through_Facebook" = "Facebook を介したログインはできなくなりました。Kickstarter のパスワードを使ってログインするか、Facebook のメールアドレスを使って新しいパスワードを設定してください。"; "We_cant_process_this_pledge_because_of_a_problem_with_the_backers_payment_method" = "バッカーのお支払い方法で問題があったためこのプレッジを処理することができません。"; "We_cant_process_your_pledge" = "プレッジを処理することができません。"; "We_cant_process_your_pledge_Please_update_your_payment_method" = "プレッジを処理できません。お支払い方法を更新してください。"; @@ -701,11 +709,13 @@ "We_dont_allow_cancelations_that_will_cause_a_project_to_fall_short_of_its_goal_within_the_last_24_hours" = "キャンペーンの最後の24時間において、プレッジを取り消すことよってプロジェクトがファンディングゴールに到達できなくなる場合においては、そのようなプレッジの取り消しは許可されません。"; "We_re_processing_this_pledge_pull_to_refresh" = "このプレッジを処理中です。リフレッシュするにはプルしてください。"; "We_re_processing_your_pledge_pull_to_refresh" = "プレッジを処理中です。リフレッシュするにはプルしてください。"; +"We_re_simplifying_our_login_process_To_log_in" = "Kickstarter ではログインの手続きが簡素化されます。Kickstarter アカウントにアクセスするには、Facebook アカウントに登録されているメールアドレスを入力してください。パスワードを設定するためのリンクをお送りします。"; "We_think_youll_like_these_too" = "その他おすすめプロジェクト"; "We_use_your_activity_internally_to_make_recommendations_for_you" = "あなたのアクティビティをもとにおすすめの提供を行っています。オプトアウトするにはおすすめ機能をオフにしてください。"; "We_ve_been_unable_to_send_email" = "このアドレスにメールを送信できませんでした。メールアドレスが正確に入力されていることをご確認ください。"; "We_were_unable_to_connect_to_the_live_stream_chat" = "ライブ配信への接続に失敗。"; "We_were_unable_to_load_the_shipping_destinations" = "配送先の読込に失敗。\n再度お試しください。"; +"We_will_be_discontinuing_the_ability_to_log_in_via_Facebook" = "Facebook 経由でのログイン機能の提供がまもなく終了します。メールアドレス %{email} を使ってアカウントにログインするには、6 文字以上のパスワードを設定してください。"; "We_wont_share_this_with_the_creator" = "これはクリエイターには共有されません。"; "Websites" = "ウェブサイト"; "Welcome_to_our_library_Peruse_the_stacks_with_us" = "Kickstarter ライブラリーへようこそ。色んなストーリーを一緒に読み漁ろう!"; @@ -1313,6 +1323,7 @@ "forgot_password.placeholder_email" = "メールアドレス"; "forgot_password.title" = "パスワードを忘れましたか?"; "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_reset_your_password" = "%{email} にメールを送信しました。パスワードのリセット法が書かれています。"; +"forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password" = "パスワードの設定方法が記載されたメールを %{email} に送信しました。"; "general.accessibility.kickstarter" = "Kickstarter"; "general.alert.buttons.ok" = "OK"; "general.backer_count_backers.few" = "%{backer_count} バッカー"; diff --git a/Kickstarter.xcodeproj/project.pbxproj b/Kickstarter.xcodeproj/project.pbxproj index b99144f265..3677a8fad7 100644 --- a/Kickstarter.xcodeproj/project.pbxproj +++ b/Kickstarter.xcodeproj/project.pbxproj @@ -716,7 +716,6 @@ 8A5CB28424C11819003113D4 /* RewardAddOnSelectionContinueCTAViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A5CB28324C11819003113D4 /* RewardAddOnSelectionContinueCTAViewModelTests.swift */; }; 8A64F16624BE6528004917E2 /* RewardAddOnSelectionViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A64F16524BE6528004917E2 /* RewardAddOnSelectionViewControllerTests.swift */; }; 8A65E79E2501AE89006F81CC /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8A65E79D2501AE89006F81CC /* GoogleService-Info.plist */; }; - 8A67DDB424DCA41400B4AB10 /* User+GraphUserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A67DDB324DCA41400B4AB10 /* User+GraphUserTests.swift */; }; 8A67DDB624DCB7D500B4AB10 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A67DDB524DCB7D500B4AB10 /* Constants.swift */; }; 8A67DDB824DDB21100B4AB10 /* ErroredBackingsEnvelope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A67DDB724DDB21100B4AB10 /* ErroredBackingsEnvelope.swift */; }; 8A6C58932475E5950098D5A2 /* UIRefreshControl+StartRefreshing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6C58922475E5950098D5A2 /* UIRefreshControl+StartRefreshing.swift */; }; @@ -748,7 +747,6 @@ 8AA3DB36250AE470009AC8EA /* SettingsAccountViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D798A70F216695090053D097 /* SettingsAccountViewModelTests.swift */; }; 8AA3DB39250AF692009AC8EA /* MockPushRegistration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093B4B721A8B0E000910962 /* MockPushRegistration.swift */; }; 8AA407C024DA43D8008C5FB0 /* GraphCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA407BF24DA43D8008C5FB0 /* GraphCategory.swift */; }; - 8AA407C824DB4399008C5FB0 /* User+GraphUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA407C724DB4399008C5FB0 /* User+GraphUser.swift */; }; 8AA407CE24DB5316008C5FB0 /* GraphCategoryTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA407CD24DB5316008C5FB0 /* GraphCategoryTemplates.swift */; }; 8AA5B060235A08060022F5F0 /* STPPaymentHandler+StripePaymentHandlerActionStatusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA5B05F235A08060022F5F0 /* STPPaymentHandler+StripePaymentHandlerActionStatusTests.swift */; }; 8AA8A38424EC6DA400085282 /* ProjectAndBackingEnvelopeTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AA8A38324EC6DA400085282 /* ProjectAndBackingEnvelopeTemplates.swift */; }; @@ -2304,7 +2302,6 @@ 8A5CB28324C11819003113D4 /* RewardAddOnSelectionContinueCTAViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardAddOnSelectionContinueCTAViewModelTests.swift; sourceTree = ""; }; 8A64F16524BE6528004917E2 /* RewardAddOnSelectionViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardAddOnSelectionViewControllerTests.swift; sourceTree = ""; }; 8A65E79D2501AE89006F81CC /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "GoogleService-Info.plist"; path = "Configs/GoogleService-Info.plist"; sourceTree = ""; }; - 8A67DDB324DCA41400B4AB10 /* User+GraphUserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "User+GraphUserTests.swift"; sourceTree = ""; }; 8A67DDB524DCB7D500B4AB10 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 8A67DDB724DDB21100B4AB10 /* ErroredBackingsEnvelope.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErroredBackingsEnvelope.swift; sourceTree = ""; }; 8A6C58922475E5950098D5A2 /* UIRefreshControl+StartRefreshing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIRefreshControl+StartRefreshing.swift"; sourceTree = ""; }; @@ -2328,7 +2325,6 @@ 8A8C6133243F99AB0092B682 /* ContentSizeTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentSizeTableView.swift; sourceTree = ""; }; 8A8C6135243FBA640092B682 /* PledgePaymentMethodsDataSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PledgePaymentMethodsDataSourceTests.swift; sourceTree = ""; }; 8AA407BF24DA43D8008C5FB0 /* GraphCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphCategory.swift; sourceTree = ""; }; - 8AA407C724DB4399008C5FB0 /* User+GraphUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "User+GraphUser.swift"; sourceTree = ""; }; 8AA407CD24DB5316008C5FB0 /* GraphCategoryTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphCategoryTemplates.swift; sourceTree = ""; }; 8AA5B05F235A08060022F5F0 /* STPPaymentHandler+StripePaymentHandlerActionStatusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "STPPaymentHandler+StripePaymentHandlerActionStatusTests.swift"; sourceTree = ""; }; 8AA8A38324EC6DA400085282 /* ProjectAndBackingEnvelopeTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectAndBackingEnvelopeTemplates.swift; sourceTree = ""; }; @@ -6085,8 +6081,6 @@ 47D7D09D26C2FC4000D2BAB5 /* SignInWithAppleEnvelope+SignInWithAppleMutation.DataTests.swift */, 065E6BA526B1C7FD007F67CA /* UpdateBackingEnvelope+UpdateBackingMutation.Data.swift */, 8AC3E127269F5B9700168BF8 /* UpdateBackingEnvelope+UpdateBackingMutation.DataTests.swift */, - 8AA407C724DB4399008C5FB0 /* User+GraphUser.swift */, - 8A67DDB324DCA41400B4AB10 /* User+GraphUserTests.swift */, 8A1557142693B28300017845 /* User+UserFragment.swift */, 8AC3E0652697AC0400168BF8 /* User+UserFragmentTests.swift */, 4778EE2026A200BE0059EA69 /* UserEnvelope+GraphUserEnvelope.swift */, @@ -8805,7 +8799,6 @@ D01589211EEB2ED7006E7684 /* StarEnvelope.swift in Sources */, 8ADCCD862655CA680079D308 /* ApolloClient+Singleton.swift in Sources */, D01588EF1EEB2ED7006E7684 /* MessageThread.swift in Sources */, - 8AA407C824DB4399008C5FB0 /* User+GraphUser.swift in Sources */, 8A4E95392450FBB500A578CF /* CreditCardType.swift in Sources */, D0158A2F1EEB30A2006E7684 /* User.MemberDataTemplates.swift in Sources */, D015883D1EEB2ED7006E7684 /* Route.swift in Sources */, @@ -9035,7 +9028,6 @@ 8ADCCCC0264CA1270079D308 /* CommentsEnvelope+GraphCommentsEnvelopeTests.swift in Sources */, D0D10C0B1EEB4550005EBAD0 /* ErrorEnvelopeTests.swift in Sources */, D0D10C031EEB4550005EBAD0 /* BackingTests.swift in Sources */, - 8A67DDB424DCA41400B4AB10 /* User+GraphUserTests.swift in Sources */, D0D10C081EEB4550005EBAD0 /* ConfigTests.swift in Sources */, 064AEF13270CFB53006605DD /* Project+FetchProjectRewardsByIdQueryDataTests.swift in Sources */, 06962F8F273B3DF200FB0B3D /* GraphAPI.PostCommentInput+PostCommentInputTests.swift in Sources */, diff --git a/KsApi/models/ActivityTests.swift b/KsApi/models/ActivityTests.swift index 93649451f8..a1c65c8c84 100644 --- a/KsApi/models/ActivityTests.swift +++ b/KsApi/models/ActivityTests.swift @@ -65,6 +65,7 @@ internal final class ActivityTests: XCTestCase { "user": [ "id": 2, "name": "User", + "needs_password": false, "avatar": [ "medium": "img.jpg", "small": "img.jpg", diff --git a/KsApi/models/FindFriendsEnvelopeTests.swift b/KsApi/models/FindFriendsEnvelopeTests.swift index 6b386346db..6878a90d4f 100644 --- a/KsApi/models/FindFriendsEnvelopeTests.swift +++ b/KsApi/models/FindFriendsEnvelopeTests.swift @@ -18,6 +18,7 @@ final class FindFriendsEnvelopeTests: XCTestCase { "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" ], + "needs_password": false, "backed_projects_count": 2, "weekly_newsletter": false, "promo_newsletter": false, @@ -38,6 +39,7 @@ final class FindFriendsEnvelopeTests: XCTestCase { "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" ], + "needs_password": false, "backed_projects_count": 2, "weekly_newsletter": false, "promo_newsletter": false, diff --git a/KsApi/models/MessageTests.swift b/KsApi/models/MessageTests.swift index bec74fde76..2b1c0056c5 100644 --- a/KsApi/models/MessageTests.swift +++ b/KsApi/models/MessageTests.swift @@ -13,7 +13,8 @@ internal final class MessageTests: XCTestCase { "avatar": [ "medium": "img", "small": "img" - ] + ], + "needs_password": true ], "sender": [ "id": 2, @@ -21,7 +22,8 @@ internal final class MessageTests: XCTestCase { "avatar": [ "medium": "img", "small": "img" - ] + ], + "needs_password": true ] ]) diff --git a/KsApi/models/MessageThreadTests.swift b/KsApi/models/MessageThreadTests.swift index e296174815..535564df3a 100644 --- a/KsApi/models/MessageThreadTests.swift +++ b/KsApi/models/MessageThreadTests.swift @@ -16,7 +16,8 @@ internal final class MessageThreadTests: XCTestCase { "avatar": [ "medium": "img", "small": "img" - ] + ], + "needs_password": true ], "sender": [ "id": 2, @@ -24,7 +25,8 @@ internal final class MessageThreadTests: XCTestCase { "avatar": [ "medium": "img", "small": "img" - ] + ], + "needs_password": true ] ], "unread_messages_count": 1, @@ -34,7 +36,8 @@ internal final class MessageThreadTests: XCTestCase { "avatar": [ "medium": "img", "small": "img" - ] + ], + "needs_password": true ], "project": [ "id": 1, @@ -55,7 +58,8 @@ internal final class MessageThreadTests: XCTestCase { "avatar": [ "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" - ] + ], + "needs_password": true ], "photo": [ "full": "http://www.kickstarter.com/full.jpg", diff --git a/KsApi/models/ProjectActivityEnvelopeTests.swift b/KsApi/models/ProjectActivityEnvelopeTests.swift index 4296e76121..893852f0a9 100644 --- a/KsApi/models/ProjectActivityEnvelopeTests.swift +++ b/KsApi/models/ProjectActivityEnvelopeTests.swift @@ -31,6 +31,7 @@ final class ProjectActivityEnvelopeTests: XCTestCase { "small": "https://ksr-ugc.imgix.net/assets/008/236/721/d406e60ddcc2d3bd3ed541bb915ef53e_original.jpeg?ixlib=rb-2.1.0&w=80&h=80&fit=crop&v=1461511746&auto=format&frame=1&q=92&s=89ae627aba2c664d513ab93ebbc28753", "medium": "https://ksr-ugc.imgix.net/assets/008/236/721/d406e60ddcc2d3bd3ed541bb915ef53e_original.jpeg?ixlib=rb-2.1.0&w=160&h=160&fit=crop&v=1461511746&auto=format&frame=1&q=92&s=6b5d8f08ea5e27cf225bd65e85b7744a" ], + "needs_password": true, "urls": [ "web": [ "user": "https://www.kickstarter.com/profile/katiem" diff --git a/KsApi/models/ProjectTests.swift b/KsApi/models/ProjectTests.swift index 1b8629b044..01364cb986 100644 --- a/KsApi/models/ProjectTests.swift +++ b/KsApi/models/ProjectTests.swift @@ -73,7 +73,8 @@ final class ProjectTests: XCTestCase { "avatar": [ "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" - ] + ], + "needs_password": false ], "photo": [ "full": "http://www.kickstarter.com/full.jpg", @@ -140,7 +141,8 @@ final class ProjectTests: XCTestCase { "avatar": [ "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" - ] + ], + "needs_password": false ], "photo": [ "full": "http://www.kickstarter.com/full.jpg", @@ -233,7 +235,8 @@ final class ProjectTests: XCTestCase { "avatar": [ "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" - ] + ], + "needs_password": false ], "photo": [ "full": "http://www.kickstarter.com/full.jpg", diff --git a/KsApi/models/UpdateTests.swift b/KsApi/models/UpdateTests.swift index 221e39adf9..b2e18e9f25 100644 --- a/KsApi/models/UpdateTests.swift +++ b/KsApi/models/UpdateTests.swift @@ -50,7 +50,8 @@ internal final class UpdateTests: XCTestCase { "medium": "img.jpg", "small": "img.jpg", "large": "img.jpg" - ] + ], + "needs_password": false ], "visible": true, "urls": [ diff --git a/KsApi/models/User.swift b/KsApi/models/User.swift index 7104513129..05db9f490a 100644 --- a/KsApi/models/User.swift +++ b/KsApi/models/User.swift @@ -11,6 +11,7 @@ public struct User { public var location: Location? public var name: String public var needsFreshFacebookToken: Bool? + public var needsPassword: Bool? public var newsletters: NewsletterSubscriptions public var notifications: Notifications public var optedOutOfRecommendations: Bool? @@ -121,6 +122,7 @@ extension User: Decodable { self.location = try? values.decodeIfPresent(Location.self, forKey: .location) self.name = try values.decode(String.self, forKey: .name) self.needsFreshFacebookToken = try values.decodeIfPresent(Bool.self, forKey: .needsFreshFacebookToken) + self.needsPassword = try values.decodeIfPresent(Bool.self, forKey: .needsPassword) self.newsletters = try User.NewsletterSubscriptions(from: decoder) self.notifications = try User.Notifications(from: decoder) self.optedOutOfRecommendations = try values.decodeIfPresent(Bool.self, forKey: .optedOutOfRecommendations) @@ -141,6 +143,7 @@ extension User: Decodable { case location case name case needsFreshFacebookToken = "needs_fresh_facebook_token" + case needsPassword = "needs_password" case optedOutOfRecommendations = "opted_out_of_recommendations" case showPublicProfile = "show_public_profile" case social @@ -159,6 +162,7 @@ extension User: EncodableType { result["is_friend"] = self.isFriend ?? false result["location"] = self.location?.encode() result["name"] = self.name + result["needs_password"] = self.needsPassword ?? false result["opted_out_of_recommendations"] = self.optedOutOfRecommendations ?? false result["social"] = self.social ?? false result["show_public_profile"] = self.showPublicProfile ?? false diff --git a/KsApi/models/UserTests.swift b/KsApi/models/UserTests.swift index 5a65e9808d..3e49662a91 100644 --- a/KsApi/models/UserTests.swift +++ b/KsApi/models/UserTests.swift @@ -20,6 +20,7 @@ final class UserTests: XCTestCase { "medium": "http://www.kickstarter.com/medium.jpg", "small": "http://www.kickstarter.com/small.jpg" ], + "needs_password": true, "backed_projects_count": 2, "draft_projects_count": 4, "weekly_newsletter": false, @@ -44,24 +45,29 @@ final class UserTests: XCTestCase { "social": true ] - let user: User? = tryDecode(json) + guard let user: User = tryDecode(json) else { + XCTFail("User object should be decodable") - XCTAssertEqual(1, user?.id) - XCTAssertEqual(false, user?.isAdmin) - XCTAssertEqual("http://www.kickstarter.com/small.jpg", user?.avatar.small) - XCTAssertEqual(2, user?.stats.backedProjectsCount) - XCTAssertEqual(4, user?.stats.draftProjectsCount) - XCTAssertEqual(false, user?.newsletters.weekly) - XCTAssertEqual(false, user?.newsletters.promo) - XCTAssertEqual(false, user?.newsletters.happening) - XCTAssertEqual(false, user?.newsletters.games) - XCTAssertEqual(false, user?.notifications.commentReplies) - XCTAssertEqual(true, user?.notifications.mobileMarketingUpdate) - XCTAssertEqual(false, user?.facebookConnected) - XCTAssertEqual(false, user?.isEmailVerified) - XCTAssertEqual(false, user?.isFriend) - XCTAssertNotNil(user?.location) - XCTAssertEqual(json as NSDictionary?, user?.encode() as NSDictionary?) + return + } + + XCTAssertEqual(1, user.id) + XCTAssertEqual(false, user.isAdmin) + XCTAssertEqual("http://www.kickstarter.com/small.jpg", user.avatar.small) + XCTAssertEqual(2, user.stats.backedProjectsCount) + XCTAssertEqual(4, user.stats.draftProjectsCount) + XCTAssertEqual(false, user.newsletters.weekly) + XCTAssertEqual(false, user.newsletters.promo) + XCTAssertEqual(false, user.newsletters.happening) + XCTAssertEqual(false, user.newsletters.games) + XCTAssertEqual(false, user.notifications.commentReplies) + XCTAssertEqual(true, user.notifications.mobileMarketingUpdate) + XCTAssertEqual(false, user.facebookConnected) + XCTAssertEqual(false, user.isEmailVerified) + XCTAssertTrue(user.needsPassword!) + XCTAssertEqual(false, user.isFriend) + XCTAssertNotNil(user.location) + XCTAssertEqual(json as NSDictionary?, user.encode() as NSDictionary?) } func testJsonEncoding() { @@ -73,6 +79,7 @@ final class UserTests: XCTestCase { "small": "http://www.kickstarter.com/small.jpg", "large": "http://www.kickstarter.com/large.jpg" ], + "needs_password": false, "backed_projects_count": 2, "games_newsletter": false, "happening_newsletter": false, diff --git a/KsApi/models/graphql/adapters/User+GraphUser.swift b/KsApi/models/graphql/adapters/User+GraphUser.swift deleted file mode 100644 index e623b3db55..0000000000 --- a/KsApi/models/graphql/adapters/User+GraphUser.swift +++ /dev/null @@ -1,34 +0,0 @@ -import Foundation - -extension User { - /** - Returns a minimal `User` from a `GraphUser` - */ - static func user(from graphUser: GraphUser) -> User? { - guard let id = decompose(id: graphUser.id) else { return nil } - - return User( - avatar: Avatar( - large: graphUser.imageUrl, - medium: graphUser.imageUrl, - small: graphUser.imageUrl - ), - erroredBackingsCount: nil, - facebookConnected: nil, - id: id, - isAdmin: nil, - isEmailVerified: nil, - isFriend: nil, - location: nil, - name: graphUser.name, - needsFreshFacebookToken: nil, - newsletters: NewsletterSubscriptions(), - notifications: Notifications(), - optedOutOfRecommendations: nil, - showPublicProfile: nil, - social: nil, - stats: Stats(), - unseenActivityCount: nil - ) - } -} diff --git a/KsApi/models/graphql/adapters/User+GraphUserTests.swift b/KsApi/models/graphql/adapters/User+GraphUserTests.swift deleted file mode 100644 index db7cfa388d..0000000000 --- a/KsApi/models/graphql/adapters/User+GraphUserTests.swift +++ /dev/null @@ -1,9 +0,0 @@ -@testable import KsApi -import XCTest - -final class User_GraphUserTests: XCTestCase { - func test() { - // TODO: consider testing more variations - XCTAssertNotNil(User.user(from: .template)) - } -} diff --git a/KsApi/models/graphql/adapters/User+UserFragment.swift b/KsApi/models/graphql/adapters/User+UserFragment.swift index ca16f86dec..2b21a3f23a 100644 --- a/KsApi/models/graphql/adapters/User+UserFragment.swift +++ b/KsApi/models/graphql/adapters/User+UserFragment.swift @@ -27,6 +27,7 @@ extension User { location: self.location(userFragment: userFragment), name: userFragment.name, needsFreshFacebookToken: userFragment.needsFreshFacebookToken, + needsPassword: self.needsPassword(userFragment: userFragment), newsletters: self.newsletterSubscriptions(userFragment: userFragment), notifications: self.notifications(userFragment: userFragment), optedOutOfRecommendations: userFragment.optedOutOfRecommendations, @@ -215,6 +216,14 @@ extension User { return isFacebookConnected } + private static func needsPassword(userFragment: GraphAPI.UserFragment) -> Bool { + guard let userHasPassword = userFragment.hasPassword else { + return true + } + + return !userHasPassword + } + private static func isAdmin(userFragment: GraphAPI.UserFragment) -> Bool? { var isAdmin: Bool? diff --git a/KsApi/models/lenses/UserLenses.swift b/KsApi/models/lenses/UserLenses.swift index 11b9dc276e..dba7be7abe 100644 --- a/KsApi/models/lenses/UserLenses.swift +++ b/KsApi/models/lenses/UserLenses.swift @@ -15,6 +15,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -38,6 +39,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -61,6 +63,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -84,6 +87,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -106,6 +110,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -128,6 +133,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -150,6 +156,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -172,6 +179,7 @@ extension User { location: $0, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -194,6 +202,7 @@ extension User { location: $1.location, name: $0, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -217,6 +226,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $0, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -240,6 +250,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $0, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -263,6 +274,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $0, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -286,6 +298,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $0, @@ -309,6 +322,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -332,6 +346,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -355,6 +370,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, @@ -377,6 +393,7 @@ extension User { location: $1.location, name: $1.name, needsFreshFacebookToken: $1.needsFreshFacebookToken, + needsPassword: $1.needsPassword, newsletters: $1.newsletters, notifications: $1.notifications, optedOutOfRecommendations: $1.optedOutOfRecommendations, diff --git a/KsApi/models/templates/UserTemplates.swift b/KsApi/models/templates/UserTemplates.swift index e573292465..87e31ccced 100644 --- a/KsApi/models/templates/UserTemplates.swift +++ b/KsApi/models/templates/UserTemplates.swift @@ -11,6 +11,7 @@ extension User { location: nil, name: "Blob", needsFreshFacebookToken: false, + needsPassword: false, newsletters: .template, notifications: .template, optedOutOfRecommendations: false, diff --git a/Library/Strings.swift b/Library/Strings.swift index 62b98a5103..e9bc46db9f 100644 --- a/Library/Strings.swift +++ b/Library/Strings.swift @@ -929,7 +929,7 @@ public enum Strings { "Backed by people you follow" - **en**: "Backed by people you follow" - - **de**: "Unterstützt von deinen Freunden" + - **de**: "Unterstützt von Personen, denen du folgst" - **es**: "Patrocinados por gente que sigues" - **fr**: "Soutenus par ceux que vous suivez" - **ja**: "フォロー中の友達がバック" @@ -988,8 +988,7 @@ Unterstützer" patrocinadores" - **fr**: "%{backers_count} contributeurs" - - **ja**: "%{backers_count} -バッカー" + - **ja**: "%{backers_count} バッカー" */ public static func Backers_count_separator_backers(backers_count: Int) -> String { return localizedString( @@ -3995,7 +3994,7 @@ Cliquez pour réessayer." "Followed" - **en**: "Followed" - - **de**: "Abonniert" + - **de**: "Gefolgt" - **es**: "Siguiendo" - **fr**: "Abonné" - **ja**: "フォロー中" @@ -4012,7 +4011,7 @@ Cliquez pour réessayer." "Following" - **en**: "Following" - - **de**: "Abonniert" + - **de**: "Gefolgt" - **es**: "Siguiendo" - **fr**: "Projets soutenus par mes amis" - **ja**: "フォロー中の友達" @@ -4029,7 +4028,7 @@ Cliquez pour réessayer." "Following must be on to find Facebook friends. Change your account privacy settings to enable this feature." - **en**: "Following must be on to find Facebook friends. Change your account privacy settings to enable this feature." - - **de**: "Die Funktion "Abonnieren" muss aktiviert sein, um Freunde auf Facebook zu finden. Gehe dazu zu Einstellungen > Datenschutz." + - **de**: "Die Funktion „Folgen“ muss aktiviert sein, um Freunde auf Facebook zu finden. Gehe dazu zu Einstellungen > Datenschutz." - **es**: "El seguimiento debe estar activado para encontrar amigos de Facebook. El seguimiento se puede cambiar en Configuración > Privacidad." - **fr**: "Pour retrouver vos amis Facebook, activez la fonction Abonnements sous Paramètres > Vie privée." - **ja**: "Facebook の友達を見つけるには、フォローをオンにする必要があります。フォローの設定は、「設定 > プライバシー」から変更することができます。" @@ -5354,6 +5353,23 @@ with friends." substitutions: [:] ) } + /** + "Kickstarter’s Community Guidelines." + + - **en**: "Kickstarter’s Community Guidelines." + - **de**: "Kickstarter’s Community Guidelines." + - **es**: "Kickstarter’s Community Guidelines." + - **fr**: "Kickstarter’s Community Guidelines." + - **ja**: "Kickstarter’s Community Guidelines." + */ + public static func Kickstarters_community_guidelines() -> String { + return localizedString( + key: "Kickstarters_community_guidelines", + defaultValue: "Kickstarter’s Community Guidelines.", + count: nil, + substitutions: [:] + ) + } /** "Know when creators and backers message you by enabling notifications." @@ -6466,7 +6482,7 @@ n'ont rien soutenu." "Not followed" - **en**: "Not followed" - - **de**: "Nicht abonniert" + - **de**: "Nicht gefolgt" - **es**: "No siguiendo" - **fr**: "Non abonné" - **ja**: "フォローしてない" @@ -8284,6 +8300,23 @@ daring ideas." substitutions: [:] ) } + /** + "Reset your password" + + - **en**: "Reset your password" + - **de**: "Passwort zurücksetzen" + - **es**: "Restablece tu contraseña" + - **fr**: "Réinitialiser votre mot de passe" + - **ja**: "パスワードをリセット" + */ + public static func Reset_your_password() -> String { + return localizedString( + key: "Reset_your_password", + defaultValue: "Reset your password", + count: nil, + substitutions: [:] + ) + } /** "Retry" @@ -9032,6 +9065,40 @@ daring ideas." substitutions: [:] ) } + /** + "Set new password" + + - **en**: "Set new password" + - **de**: "Neues Passwort festlegen" + - **es**: "Configurar nueva contraseña" + - **fr**: "Création d'un mot de passe" + - **ja**: "新しいパスワードを設定" + */ + public static func Set_new_password() -> String { + return localizedString( + key: "Set_new_password", + defaultValue: "Set new password", + count: nil, + substitutions: [:] + ) + } + /** + "Set your password" + + - **en**: "Set your password" + - **de**: "Passwort festlegen" + - **es**: "Configura tu contraseña" + - **fr**: "Veuillez créer un mot de passe" + - **ja**: "パスワードを設定" + */ + public static func Set_your_password() -> String { + return localizedString( + key: "Set_your_password", + defaultValue: "Set your password", + count: nil, + substitutions: [:] + ) + } /** "Share" @@ -9424,18 +9491,18 @@ daring ideas." ) } /** - "%{friend_name} and %{remaining_count} others" + "%{friend_name} and %{remaining_count} other" - - **en**: "%{friend_name} and %{remaining_count} others" - - **de**: "%{friend_name} und %{remaining_count} weitere" - - **es**: "%{friend_name} y %{remaining_count} otros" - - **fr**: "%{friend_name} et %{remaining_count} autre(s)" + - **en**: "%{friend_name} and %{remaining_count} other" + - **de**: "%{friend_name} und %{remaining_count} weitere Person" + - **es**: "%{friend_name} y %{remaining_count} persona más" + - **fr**: "%{friend_name} et %{remaining_count} autre" - **ja**: "%{friend_name} さんと他%{remaining_count} 人" */ public static func Social_friend_is_backer(friend_name: String, remaining_count: Int) -> String { return localizedString( key: "Social_friend_is_backer", - defaultValue: "%{friend_name} and %{remaining_count} others", + defaultValue: "%{friend_name} and %{remaining_count} other", count: remaining_count, substitutions: ["friend_name": friend_name, "remaining_count": Format.wholeNumber(remaining_count)] ) @@ -10292,6 +10359,57 @@ catch your eye?" substitutions: [:] ) } + /** + "This comment is under review." + + - **en**: "This comment is under review." + - **de**: "Dieser Kommentar wird gerade überprüft." + - **es**: "Este comentario está en revisión." + - **fr**: "Ce commentaire est en cours de vérification." + - **ja**: "このコメントは現在審査中です。" + */ + public static func This_comment_is_under_review() -> String { + return localizedString( + key: "This_comment_is_under_review", + defaultValue: "This comment is under review.", + count: nil, + substitutions: [:] + ) + } + /** + "This comment is under review for potentially violating" + + - **en**: "This comment is under review for potentially violating" + - **de**: "This comment is under review for potentially violating" + - **es**: "This comment is under review for potentially violating" + - **fr**: "This comment is under review for potentially violating" + - **ja**: "This comment is under review for potentially violating" + */ + public static func This_comment_is_under_review_for_potentially_violating() -> String { + return localizedString( + key: "This_comment_is_under_review_for_potentially_violating", + defaultValue: "This comment is under review for potentially violating", + count: nil, + substitutions: [:] + ) + } + /** + "This comment is under review for potentially violating Kickstarter’s Community Guidelines." + + - **en**: "This comment is under review for potentially violating Kickstarter’s Community Guidelines." + - **de**: "Dieser Kommentar wird gerade geprüft, weil er möglicherweise gegen die Community-Richtlinien von Kickstarter verstößt." + - **es**: "Este comentario está en revisión por una posible infracción de las Reglas de la comunidad de Kickstarter." + - **fr**: "Ce commentaire est en cours d'examen pour manquement possible aux Règles de bonne conduite de Kickstarter." + - **ja**: "このコメントは Kickstarter のコミュニティガイドラインに違反している可能性があるとして現在審査中です。" + */ + public static func This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines(community_guidelines: String) -> String { + return localizedString( + key: "This_comment_is_under_review_for_potentially_violating_kickstarters_community_guidelines", + defaultValue: "This comment is under review for potentially violating Kickstarter’s Community Guidelines.", + count: nil, + substitutions: ["community_guidelines": community_guidelines] + ) + } /** "This Facebook account is already linked to another Kickstarter user." @@ -11261,6 +11379,23 @@ catch your eye?" substitutions: [:] ) } + /** + "We can no longer log you in through Facebook. Please log in with your Kickstarter password, or set a new password with your Facebook email." + + - **en**: "We can no longer log you in through Facebook. Please log in with your Kickstarter password, or set a new password with your Facebook email." + - **de**: "Wir können dich nicht mehr über Facebook anmelden. Bitte melde dich mit deinem Kickstarter-Passwort an oder leg für deine Facebook-E-Mail-Adresse ein neues Passwort fest." + - **es**: "Ya no admitimos el inicio de sesión a través de Facebook. Inicia sesión con tu contraseña de Kickstarter o configura una nueva contraseña con tu correo electrónico de Facebook." + - **fr**: "La connexion Facebook est désormais impossible. Veuillez vous connecter avec votre mot de passe Kickstarter, ou créer un autre mot de passe pour votre adresse Facebook." + - **ja**: "Facebook を介したログインはできなくなりました。Kickstarter のパスワードを使ってログインするか、Facebook のメールアドレスを使って新しいパスワードを設定してください。" + */ + public static func We_can_no_longer_log_you_in_through_Facebook() -> String { + return localizedString( + key: "We_can_no_longer_log_you_in_through_Facebook", + defaultValue: "We can no longer log you in through Facebook. Please log in with your Kickstarter password, or set a new password with your Facebook email.", + count: nil, + substitutions: [:] + ) + } /** "We can’t process this pledge because of a problem with the backer’s payment method." @@ -11448,6 +11583,23 @@ catch your eye?" substitutions: [:] ) } + /** + "We’re simplifying our login process. To access your Kickstarter account, enter the email associated to your Facebook account and we’ll send you a link to set a password" + + - **en**: "We’re simplifying our login process. To access your Kickstarter account, enter the email associated to your Facebook account and we’ll send you a link to set a password" + - **de**: "Wir vereinfachen unseren Anmeldeprozess. Wenn du auf dein Kickstarter-Konto zugreifen möchtest, gib die E-Mail-Adresse ein, die mit deinem Facebook-Konto verknüpft ist. Wir senden dir dann einen Link, über den du ein Passwort festlegen kannst" + - **es**: "Simplificaremos el proceso de inicio de sesión. Para acceder a tu cuenta de Kickstarter, escribe el correo electrónico asociado a tu cuenta de Facebook y te enviaremos un enlace para configurar una contraseña." + - **fr**: "Notre procédure de connexion est en cours de simplification. Pour accéder à votre compte Kickstarter, saisissez l'adresse e-mail associée à votre compte Facebook et nous vous enverrons un lien de réinitialisation." + - **ja**: "Kickstarter ではログインの手続きが簡素化されます。Kickstarter アカウントにアクセスするには、Facebook アカウントに登録されているメールアドレスを入力してください。パスワードを設定するためのリンクをお送りします。" + */ + public static func We_re_simplifying_our_login_process_To_log_in() -> String { + return localizedString( + key: "We_re_simplifying_our_login_process_To_log_in", + defaultValue: "We’re simplifying our login process. To access your Kickstarter account, enter the email associated to your Facebook account and we’ll send you a link to set a password", + count: nil, + substitutions: [:] + ) + } /** "We think you’ll like these, too" @@ -11539,6 +11691,23 @@ Veuillez réessayer ultérieurement." substitutions: [:] ) } + /** + "We will be discontinuing the ability to log in via Facebook. To log in to your account using the email %{email}, please set a password that's at least 6 characters long." + + - **en**: "We will be discontinuing the ability to log in via Facebook. To log in to your account using the email %{email}, please set a password that's at least 6 characters long." + - **de**: "Wir werden die Anmeldung über Facebook einstellen. Um dich mit der E-Mail-Adresse %{email} in deinem Konto anzumelden, leg bitte ein Passwort fest, das mindestens 6 Zeichen lang ist." + - **es**: "Descontinuaremos la posibilidad de iniciar sesión a través de Facebook. Para iniciar sesión en tu cuenta con el correo electrónico %{email}, configura una contraseña que tenga al menos seis caracteres." + - **fr**: "La fonctionnalité de connexion avec Facebook va être éliminée. Pour vous connecter à votre compte avec l'adresse %{email}, veuillez créer un mot de passe qui contient au moins 6 caractères." + - **ja**: "Facebook 経由でのログイン機能の提供がまもなく終了します。メールアドレス %{email} を使ってアカウントにログインするには、6 文字以上のパスワードを設定してください。" + */ + public static func We_will_be_discontinuing_the_ability_to_log_in_via_Facebook(email: String) -> String { + return localizedString( + key: "We_will_be_discontinuing_the_ability_to_log_in_via_Facebook", + defaultValue: "We will be discontinuing the ability to log in via Facebook. To log in to your account using the email %{email}, please set a password that's at least 6 characters long.", + count: nil, + substitutions: ["email": email] + ) + } /** "We won’t share this with the creator." @@ -11662,7 +11831,7 @@ Veuillez réessayer ultérieurement." "When following is on, you can follow the activity of others and others can follow your activity. Turn following off to permanently delete this data." - **en**: "When following is on, you can follow the activity of others and others can follow your activity. Turn following off to permanently delete this data." - - **de**: "Wenn die Funktion Folgen gewählt wurde, kannst du die Aktivitäten von anderen einsehen und diese sehen deine Aktivitäten. Wenn die Funktion abgewählt wurde, werden diese Daten endgültig gelöscht." + - **de**: "Wenn die Funktion Folgen aktiviert wurde, kannst du die Aktivitäten von anderen einsehen und diese sehen deine Aktivitäten. Wenn die Funktion deaktiviert wurde, werden diese Daten endgültig gelöscht." - **es**: "Cuando el seguimiento está activado, puedes seguir la actividad de los demás y otros pueden seguir tu actividad. Desactiva el seguimiento para eliminar esta información definitivamente." - **fr**: "Lorsque les fonctionnalités de suivi sont activées, vous pouvez vous abonner aux activités des autres, qui pourront à leur tour s'abonner aux vôtres. Pour supprimer définitivement ces données, il vous suffit de désactiver les fonctionnalités de suivi." - **ja**: "フォローがオンになっていると、他の人のアクティビティをフォローすることができ、また、他の人もあなたのアクティビティをフォローすることができます。このようなデータを永久に削除するためにはフォローをオフにしてください。" @@ -13515,7 +13684,7 @@ Veuillez réessayer ultérieurement." "Follow back?" - **en**: "Follow back?" - - **de**: "Ihm/ihr auch folgen?" + - **de**: "Auch folgen?" - **es**: "¿Le quieres seguir también?" - **fr**: "Suivre cette personne ?" - **ja**: "フォローバックしますか?" @@ -13821,7 +13990,7 @@ Veuillez réessayer ultérieurement." "Following" - **en**: "Following" - - **de**: "Abonniert" + - **de**: "Gefolgt" - **es**: "Siguiendo" - **fr**: "Abonné" - **ja**: "フォロー中" @@ -18210,7 +18379,7 @@ Veuillez réessayer ultérieurement." - **de**: "Gesamt %{backers_count} Unterstützer, %{percent_funded} finanziert, noch %{time_left}" - **es**: "De momento tiene %{backers_count} patrocinadores, financiado al %{percent_funded}, tiempo restante: %{time_left}" - **fr**: "%{backers_count} contributeurs, projet financé à %{percent_funded}, plus que %{time_left}" - - **ja**: "バッカー%{backers_count} 人、%{percent_funded} 達成、%{time_left} で締切" + - **ja**: "バッカー%{backers_count} 人。%{percent_funded} 達成、%{time_left} で締切" */ public static func discovery_baseball_card_stats_accessibility_non_live_stat_value(backers_count: Int, percent_funded: String, time_left: String) -> String { return localizedString( @@ -19598,6 +19767,23 @@ Veuillez réessayer ultérieurement." substitutions: ["email": email] ) } + /** + "We’ve sent an email to %{email} with instructions to set your password." + + - **en**: "We’ve sent an email to %{email} with instructions to set your password." + - **de**: "Wir haben eine E-Mail mit einer Anleitung zum Festlegen deines Passworts an %{email} geschickt." + - **es**: "Hemos enviado un correo electrónico a %{email} con las instrucciones para configurar tu contraseña." + - **fr**: "Nous avons envoyé un e-mail à %{email} contenant les instructions nécessaires pour définir votre mot de passe." + - **ja**: "パスワードの設定方法が記載されたメールを %{email} に送信しました。" + */ + public static func forgot_password_we_sent_an_email_to_email_address_with_instructions_to_set_your_password(email: String) -> String { + return localizedString( + key: "forgot_password.we_sent_an_email_to_email_address_with_instructions_to_set_your_password", + defaultValue: "We’ve sent an email to %{email} with instructions to set your password.", + count: nil, + substitutions: ["email": email] + ) + } /** "Kickstarter" @@ -21587,7 +21773,7 @@ iOSの場合、設定からFacebookのアクセスを許可してください。 - **en**: "BACKED %{project_count} PROJECTS" - **de**: "HAT %{project_count} PROJEKTE UNTERSTÜTZT" - - **es**: "%{project_count} PROYECTOS APOYADOS" + - **es**: "%{project_count} PROYECTOS PATROCINADOS" - **fr**: "%{project_count} PROJETS SOUTENUS" - **ja**: "%{project_count} プロジェクトへバック済" */ @@ -24698,7 +24884,7 @@ unterstützt" patrocinados" - **fr**: "%{projects_count} projets soutenus" - - **ja**: "%{projects_count}\n件バック済み" + - **ja**: "%{projects_count} \n件バック済み" */ public static func projects_count_newline_backed(projects_count: Int) -> String { return localizedString( @@ -25596,7 +25782,7 @@ projets enregistrés" "Following" - **en**: "Following" - - **de**: "Abonniert" + - **de**: "Gefolgt" - **es**: "Siguiendo" - **fr**: "Abonné" - **ja**: "フォロー中" @@ -25650,7 +25836,7 @@ projets enregistrés" - **de**: "%{created_count} erstellt" - **es**: "%{created_count} creados" - **fr**: "%{created_count} projets créés" - - **ja**: "%{created_count}プロジェクト" + - **ja**: "%{created_count} プロジェクト" */ public static func social_following_friend_projects_count_created(created_count: Int) -> String { return localizedString( diff --git a/Library/ViewModels/LoginToutViewModel.swift b/Library/ViewModels/LoginToutViewModel.swift index 5582bdda3b..654001b9d8 100644 --- a/Library/ViewModels/LoginToutViewModel.swift +++ b/Library/ViewModels/LoginToutViewModel.swift @@ -71,8 +71,11 @@ public protocol LoginToutViewModelOutputs { /// Emits the login context to be displayed. var logInContextText: Signal { get } - /// Emits an access token envelope that can be used to update the environment. - var logIntoEnvironment: Signal { get } + /// Emits an access token envelope that can be used to update the environment via Apple. + var logIntoEnvironmentWithApple: Signal { get } + + /// Emits an access token envelope that can be used to update the environment via Facebook. + var logIntoEnvironmentWithFacebook: Signal { get } /// Emits when a login success notification should be posted. var postNotification: Signal<(Notification, Notification), Never> { get } @@ -260,7 +263,8 @@ public final class LoginToutViewModel: LoginToutViewModelType, LoginToutViewMode self.showAppleErrorAlert = Signal .merge(appleAuthorizationError, fetchUserEventError, appleSignInEventError) - self.logIntoEnvironment = Signal.merge(logIntoEnvironmentWithApple, logIntoEnvironmentWithFacebook) + self.logIntoEnvironmentWithApple = logIntoEnvironmentWithApple.signal + self.logIntoEnvironmentWithFacebook = logIntoEnvironmentWithFacebook.signal } public var inputs: LoginToutViewModelInputs { return self } @@ -341,7 +345,8 @@ public final class LoginToutViewModel: LoginToutViewModelType, LoginToutViewMode public let headlineLabelHidden: Signal public let isLoading: Signal public let logInContextText: Signal - public let logIntoEnvironment: Signal + public let logIntoEnvironmentWithApple: Signal + public let logIntoEnvironmentWithFacebook: Signal public let postNotification: Signal<(Notification, Notification), Never> public let startFacebookConfirmation: Signal<(ErrorEnvelope.FacebookUser?, String), Never> public let startLogin: Signal<(), Never> diff --git a/Library/ViewModels/LoginToutViewModelTests.swift b/Library/ViewModels/LoginToutViewModelTests.swift index 22f6b852c7..c513e209b7 100644 --- a/Library/ViewModels/LoginToutViewModelTests.swift +++ b/Library/ViewModels/LoginToutViewModelTests.swift @@ -17,7 +17,8 @@ final class LoginToutViewModelTests: TestCase { fileprivate let headlineLabelHidden = TestObserver() fileprivate let isLoading = TestObserver() fileprivate let logInContextText = TestObserver() - fileprivate let logIntoEnvironment = TestObserver() + fileprivate let logIntoEnvironmentWithApple = TestObserver() + fileprivate let logIntoEnvironmentWithFacebook = TestObserver() fileprivate let postNotification = TestObserver<(Notification.Name, Notification.Name), Never>() fileprivate let showAppleErrorAlert = TestObserver() fileprivate let showFacebookErrorAlert = TestObserver() @@ -37,7 +38,8 @@ final class LoginToutViewModelTests: TestCase { self.vm.outputs.headlineLabelHidden.observe(self.headlineLabelHidden.observer) self.vm.outputs.isLoading.observe(self.isLoading.observer) self.vm.outputs.logInContextText.observe(self.logInContextText.observer) - self.vm.outputs.logIntoEnvironment.observe(self.logIntoEnvironment.observer) + self.vm.outputs.logIntoEnvironmentWithApple.observe(self.logIntoEnvironmentWithApple.observer) + self.vm.outputs.logIntoEnvironmentWithFacebook.observe(self.logIntoEnvironmentWithFacebook.observer) self.vm.outputs.postNotification.map { ($0.0.name, $0.1.name) }.observe(self.postNotification.observer) self.vm.outputs.showAppleErrorAlert.observe(self.showAppleErrorAlert.observer) self.vm.outputs.showFacebookErrorAlert.observe(self.showFacebookErrorAlert.observer) @@ -139,7 +141,10 @@ final class LoginToutViewModelTests: TestCase { ) } - func testFacebookLoginFlow_Success() { + func testFacebookLoginFlow_Success_WhenFBLoginDeprecationFlagEnabled() { + let mockOptimizelyClient = MockOptimizelyClient() + |> \.features .~ [OptimizelyFeature.facebookLoginDeprecationEnabled.rawValue: true] + let token = AccessToken( tokenString: "12344566", permissions: [], @@ -160,40 +165,98 @@ final class LoginToutViewModelTests: TestCase { declinedPermissions: [] ) - vm.inputs.configureWith(.generic, project: nil, reward: nil) - self.vm.inputs.viewWillAppear() + withEnvironment(optimizelyClient: mockOptimizelyClient) { + vm.inputs.configureWith(.generic, project: nil, reward: nil) + self.vm.inputs.viewWillAppear() - self.attemptFacebookLogin.assertValueCount(0, "Attempt Facebook login did not emit") + self.attemptFacebookLogin.assertValueCount(0, "Attempt Facebook login did not emit") - self.vm.inputs.facebookLoginButtonPressed() + self.vm.inputs.facebookLoginButtonPressed() - self.attemptFacebookLogin.assertValueCount(1, "Attempt Facebook login emitted") + self.attemptFacebookLogin.assertValueCount(1, "Attempt Facebook login emitted") - self.vm.inputs.facebookLoginSuccess(result: result) + self.vm.inputs.facebookLoginSuccess(result: result) - self.isLoading.assertValues([true]) + self.isLoading.assertValues([true]) - // Wait enough time for API request to be made. - scheduler.advance() + // Wait enough time for API request to be made. + scheduler.advance() - self.isLoading.assertValues([true, false]) - self.logIntoEnvironment.assertValueCount(1, "Log into environment.") + self.isLoading.assertValues([true, false]) + self.logIntoEnvironmentWithFacebook.assertValueCount(1, "Log into environment.") + + self.postNotification.assertDidNotEmitValue() + + self.scheduler.advance() - self.vm.inputs.environmentLoggedIn() + // Notifications are not posted on the next run loop + XCTAssert(self.postNotification.values.isEmpty) - self.postNotification.assertDidNotEmitValue() + self.showFacebookErrorAlert.assertValueCount(0, "Facebook login error did not emit") + self.startFacebookConfirmation.assertValueCount(0, "Facebook confirmation did not emit") + } + } - self.scheduler.advance() + func testFacebookLoginFlow_Success_WhenFBLoginDeprecationFlagDisabled() { + let mockOptimizelyClient = MockOptimizelyClient() + |> \.features .~ [OptimizelyFeature.facebookLoginDeprecationEnabled.rawValue: true] - // Notifications are posted on the next run loop - XCTAssertEqual(self.postNotification.values.first?.0, .ksr_sessionStarted, "Login notification posted.") - XCTAssertEqual( - self.postNotification.values.first?.1, .ksr_showNotificationsDialog, - "Contextual Dialog notification posted." + let token = AccessToken( + tokenString: "12344566", + permissions: [], + declinedPermissions: [], + expiredPermissions: [], + appID: "834987809", + userID: "0000000001", + expirationDate: Date(), + refreshDate: Date(), + dataAccessExpirationDate: Date() ) - self.showFacebookErrorAlert.assertValueCount(0, "Facebook login error did not emit") - self.startFacebookConfirmation.assertValueCount(0, "Facebook confirmation did not emit") + let result = LoginManagerLoginResult( + token: token, + authenticationToken: nil, + isCancelled: false, + grantedPermissions: [], + declinedPermissions: [] + ) + + withEnvironment(optimizelyClient: mockOptimizelyClient) { + vm.inputs.configureWith(.generic, project: nil, reward: nil) + self.vm.inputs.viewWillAppear() + + self.attemptFacebookLogin.assertValueCount(0, "Attempt Facebook login did not emit") + + self.vm.inputs.facebookLoginButtonPressed() + + self.attemptFacebookLogin.assertValueCount(1, "Attempt Facebook login emitted") + + self.vm.inputs.facebookLoginSuccess(result: result) + + self.isLoading.assertValues([true]) + + // Wait enough time for API request to be made. + scheduler.advance() + + self.isLoading.assertValues([true, false]) + self.logIntoEnvironmentWithFacebook.assertValueCount(1, "Log into environment.") + + self.vm.inputs.environmentLoggedIn() + + self.postNotification.assertDidNotEmitValue() + + self.scheduler.advance() + + // Notifications are posted on the next run loop + XCTAssertEqual(self.postNotification.values.first?.0, .ksr_sessionStarted, "Login notification posted.") + XCTAssertEqual( + self.postNotification.values.first?.1, .ksr_showNotificationsDialog, + "Contextual Dialog notification posted." + ) + + self.showFacebookErrorAlert.assertValueCount(0, "Facebook login error did not emit") + self.startFacebookConfirmation.assertValueCount(0, "Facebook confirmation did not emit") + } } func testLoginFacebookFlow_AttemptFail() { @@ -438,7 +501,8 @@ final class LoginToutViewModelTests: TestCase { self.isLoading.assertValues([true, false]) self.startTwoFactorChallenge.assertValues(["12344566"], "TFA challenge emitted with token") - self.logIntoEnvironment.assertValueCount(0, "Did not log into environment.") + self.logIntoEnvironmentWithApple.assertValueCount(0, "Did not log into environment.") + self.logIntoEnvironmentWithFacebook.assertValueCount(0, "Did not log into environment.") self.showFacebookErrorAlert.assertValueCount(0, "Facebook login fail does not emit") self.startFacebookConfirmation.assertValueCount(0, "Facebook confirmation did not emit") } @@ -488,7 +552,7 @@ final class LoginToutViewModelTests: TestCase { ["12344566"], "Start Facebook confirmation emitted with token" ) - self.logIntoEnvironment.assertValueCount(0, "Did not log into environment.") + self.logIntoEnvironmentWithFacebook.assertValueCount(0, "Did not log into environment.") self.showFacebookErrorAlert.assertValueCount(0, "Facebook login fail does not emit") self.vm.inputs.viewWillAppear() @@ -607,7 +671,47 @@ final class LoginToutViewModelTests: TestCase { } } - func testLogIntoEnvironment_SignInWithApple() { + func testLogIntoEnvironment_SignInWithApple_WhenFBLoginDeprecationFlagDisabled() { + let user = User.template + + let envelope = SignInWithAppleEnvelope.template + |> \.signInWithApple.apiAccessToken .~ "some_token" + + let service = MockService(fetchUserResult: .success(user), signInWithAppleResult: .success(envelope)) + + let mockOptimizelyClient = MockOptimizelyClient() + |> \.features .~ [OptimizelyFeature.facebookLoginDeprecationEnabled.rawValue: false] + + withEnvironment(apiService: service, optimizelyClient: mockOptimizelyClient) { + self.vm.inputs.configureWith(.generic, project: nil, reward: nil) + self.vm.inputs.viewWillAppear() + + let data = SignInWithAppleData( + appId: "com.kickstarter.test", + firstName: "Nino", + lastName: "Teixeira", + token: "apple_auth_token" + ) + + self.isLoading.assertDidNotEmitValue() + self.logIntoEnvironmentWithApple.assertDidNotEmitValue() + + self.vm.inputs.appleAuthorizationDidSucceed(with: data) + + self.isLoading.assertValues([true]) + self.scheduler.run() + + self.isLoading.assertValues([true, false]) + self.logIntoEnvironmentWithApple.assertValueCount(1) + + let value = self.logIntoEnvironmentWithApple.values.first + + XCTAssertEqual(user, value?.user) + XCTAssertEqual("some_token", value?.accessToken) + } + } + + func testLogIntoEnvironment_SignInWithApple_WhenFBLoginDeprecationFlagEnabled() { let user = User.template let envelope = SignInWithAppleEnvelope.template @@ -615,7 +719,10 @@ final class LoginToutViewModelTests: TestCase { let service = MockService(fetchUserResult: .success(user), signInWithAppleResult: .success(envelope)) - withEnvironment(apiService: service) { + let mockOptimizelyClient = MockOptimizelyClient() + |> \.features .~ [OptimizelyFeature.facebookLoginDeprecationEnabled.rawValue: true] + + withEnvironment(apiService: service, optimizelyClient: mockOptimizelyClient) { self.vm.inputs.configureWith(.generic, project: nil, reward: nil) self.vm.inputs.viewWillAppear() @@ -627,7 +734,7 @@ final class LoginToutViewModelTests: TestCase { ) self.isLoading.assertDidNotEmitValue() - self.logIntoEnvironment.assertDidNotEmitValue() + self.logIntoEnvironmentWithApple.assertDidNotEmitValue() self.vm.inputs.appleAuthorizationDidSucceed(with: data) @@ -635,9 +742,9 @@ final class LoginToutViewModelTests: TestCase { self.scheduler.run() self.isLoading.assertValues([true, false]) - self.logIntoEnvironment.assertValueCount(1) + self.logIntoEnvironmentWithApple.assertValueCount(1) - let value = self.logIntoEnvironment.values.first + let value = self.logIntoEnvironmentWithApple.values.first XCTAssertEqual(user, value?.user) XCTAssertEqual("some_token", value?.accessToken) diff --git a/Library/ViewModels/RootViewModel.swift b/Library/ViewModels/RootViewModel.swift index 1aa3b0facd..367139d9cd 100644 --- a/Library/ViewModels/RootViewModel.swift +++ b/Library/ViewModels/RootViewModel.swift @@ -338,7 +338,11 @@ public final class RootViewModel: RootViewModelType, RootViewModelInputs, RootVi let prevSelectedTabBarItem = Signal .combineLatest(prevSelectedIndex, self.tabBarItemsData) - .map { index, data in tabBarItemLabel(for: data.items[index]) } + .map { (index, data) -> KSRAnalytics.TabBarItemLabel in + guard index < data.items.count else { return tabBarItemLabel(for: data.items[0]) } + + return tabBarItemLabel(for: data.items[index]) + } let searchTabBarSelected = Signal .combineLatest(self.didSelectIndexProperty.signal, self.tabBarItemsData) diff --git a/Library/ViewModels/SetYourPasswordViewModel.swift b/Library/ViewModels/SetYourPasswordViewModel.swift index 584b447423..23c3cf10b6 100644 --- a/Library/ViewModels/SetYourPasswordViewModel.swift +++ b/Library/ViewModels/SetYourPasswordViewModel.swift @@ -1,10 +1,11 @@ import Foundation import KsApi +import Prelude import ReactiveSwift public protocol SetYourPasswordViewModelInputs { func viewDidLoad() - func configureWith(_ userEmail: String) + func viewWillAppear() func newPasswordFieldDidChange(_ text: String) func confirmPasswordFieldDidChange(_ text: String) func newPasswordFieldDidReturn(newPassword: String) @@ -13,10 +14,14 @@ public protocol SetYourPasswordViewModelInputs { } public protocol SetYourPasswordViewModelOutputs { + var shouldShowActivityIndicator: Signal { get } var saveButtonIsEnabled: Signal { get } var contextLabelText: Signal { get } var newPasswordLabel: Signal { get } var confirmPasswordLabel: Signal { get } + var setPasswordFailure: Signal { get } + var setPasswordSuccess: Signal { get } + var textFieldsAndSaveButtonAreEnabled: Signal { get } } public protocol SetYourPasswordViewModelType { @@ -27,12 +32,27 @@ public protocol SetYourPasswordViewModelType { public final class SetYourPasswordViewModel: SetYourPasswordViewModelType, SetYourPasswordViewModelInputs, SetYourPasswordViewModelOutputs { public init() { - self.contextLabelText = self.contextLabelProperty.signal - .takeWhen(self.viewDidLoadProperty.signal) - self.newPasswordLabel = self.newPasswordLabelProperty.signal - .takeWhen(self.viewDidLoadProperty.signal) - self.confirmPasswordLabel = self.confirmPasswordLabelProperty.signal - .takeWhen(self.viewDidLoadProperty.signal) + let fetchUserEmailEvent = self.viewDidLoadProperty.signal + .switchMap { _ in + AppEnvironment.current + .apiService + .fetchGraphUser(withStoredCards: false) + .materialize() + } + + self.contextLabelText = Signal.combineLatest( + self.viewWillAppearProperty.signal, + fetchUserEmailEvent.values() + ) + .map { _, userEnvelope in + Strings + .We_will_be_discontinuing_the_ability_to_log_in_via_Facebook(email: userEnvelope.me.email ?? "") + } + + self.newPasswordLabel = self.viewWillAppearProperty.signal + .map { Strings.New_password() } + self.confirmPasswordLabel = self.viewWillAppearProperty.signal + .map { Strings.Confirm_password() } // MARK: Field Validations @@ -49,6 +69,32 @@ public final class SetYourPasswordViewModel: SetYourPasswordViewModelType, SetYo .skipRepeats() self.saveButtonIsEnabled = formIsValid + + let submitFormEvent = self.saveButtonPressedProperty.signal + + let saveAction = formIsValid + .takeWhen(submitFormEvent) + .filter(isTrue) + .ignoreValues() + + let setPasswordEvent = combinedPasswords + .takeWhen(saveAction) + .map { CreatePasswordInput(password: $0.0, passwordConfirmation: $0.1) } + .switchMap { input in + AppEnvironment.current.apiService.createPassword(input: input) + .ksr_delay(AppEnvironment.current.apiDelayInterval, on: AppEnvironment.current.scheduler) + .materialize() + } + + self.setPasswordFailure = setPasswordEvent.errors().map { $0.localizedDescription } + self.setPasswordSuccess = setPasswordEvent.values().ignoreValues() + + self.shouldShowActivityIndicator = Signal.merge( + saveAction.signal.ignoreValues().mapConst(true), + setPasswordEvent.filter { $0.isTerminating }.mapConst(false) + ) + + self.textFieldsAndSaveButtonAreEnabled = self.shouldShowActivityIndicator.map { $0 }.negate() } public var inputs: SetYourPasswordViewModelInputs { return self } @@ -61,15 +107,9 @@ public final class SetYourPasswordViewModel: SetYourPasswordViewModelType, SetYo self.viewDidLoadProperty.value = () } - private let contextLabelProperty = MutableProperty("") - private let newPasswordLabelProperty = MutableProperty("") - private let confirmPasswordLabelProperty = MutableProperty("") - public func configureWith(_ userEmail: String) { - self.contextLabelProperty - .value = - "We will be discontinuing the ability to log in via Facebook. To log in to your account using the email \(userEmail), please set a password that’s at least 6 characters long." - self.newPasswordLabelProperty.value = "Enter new password" - self.confirmPasswordLabelProperty.value = "Re-enter new password" + private let viewWillAppearProperty = MutableProperty(()) + public func viewWillAppear() { + self.viewWillAppearProperty.value = () } private let newPasswordProperty = MutableProperty("") @@ -83,22 +123,15 @@ public final class SetYourPasswordViewModel: SetYourPasswordViewModelType, SetYo } private var newPasswordDoneEditingProperty = MutableProperty(()) - public func newPasswordFieldDidReturn(newPassword: String) { - self.newPasswordLabelProperty.value = newPassword + public func newPasswordFieldDidReturn(newPassword _: String) { self.newPasswordDoneEditingProperty.value = () } private let confirmPasswordDoneEditingProperty = MutableProperty(()) - public func confirmPasswordFieldDidReturn(confirmPassword: String) { - self.confirmPasswordLabelProperty.value = confirmPassword + public func confirmPasswordFieldDidReturn(confirmPassword _: String) { self.confirmPasswordDoneEditingProperty.value = () } - private var saveButtonTappedProperty = MutableProperty(()) - public func saveButtonTapped() { - self.saveButtonTappedProperty.value = () - } - private let saveButtonPressedProperty = MutableProperty(()) public func saveButtonPressed() { self.saveButtonPressedProperty.value = () @@ -106,10 +139,14 @@ public final class SetYourPasswordViewModel: SetYourPasswordViewModelType, SetYo // MARK: - Output Properties + public var shouldShowActivityIndicator: Signal public var saveButtonIsEnabled: Signal public var contextLabelText: Signal public var newPasswordLabel: Signal public var confirmPasswordLabel: Signal + public var setPasswordFailure: Signal + public var setPasswordSuccess: Signal + public var textFieldsAndSaveButtonAreEnabled: Signal } // MARK: - Helpers diff --git a/Library/ViewModels/SetYourPasswordViewModelTests.swift b/Library/ViewModels/SetYourPasswordViewModelTests.swift index c17b57084f..e3b3ea4fd5 100644 --- a/Library/ViewModels/SetYourPasswordViewModelTests.swift +++ b/Library/ViewModels/SetYourPasswordViewModelTests.swift @@ -1,33 +1,61 @@ -import XCTest - +@testable import KsApi @testable import Library import ReactiveExtensions_TestHelpers +import XCTest final class SetYourPasswordViewModelTests: TestCase { private let viewModel = SetYourPasswordViewModel() + + private let shouldShowActivityIndicator = TestObserver() private let saveButtonIsEnabled = TestObserver() private let contextLabelText = TestObserver() private let newPasswordLabel = TestObserver() private let confirmPasswordLabel = TestObserver() + private let textFieldsAndSaveButtonAreEnabled = TestObserver() + private let setPasswordFailure = TestObserver() + private let setPasswordSuccess = TestObserver() + + private let setPasswordFailureService = + MockService(createPasswordResult: .failure(ErrorEnvelope( + errorMessages: ["Error creating password"], + ksrCode: nil, + httpCode: 1, + exception: nil + ))) + private let setPasswordSuccessService = + MockService(createPasswordResult: .success(EmptyResponseEnvelope())) override func setUp() { super.setUp() + self.viewModel.outputs.shouldShowActivityIndicator.observe(self.shouldShowActivityIndicator.observer) self.viewModel.outputs.saveButtonIsEnabled.observe(self.saveButtonIsEnabled.observer) self.viewModel.outputs.contextLabelText.observe(self.contextLabelText.observer) self.viewModel.outputs.newPasswordLabel.observe(self.newPasswordLabel.observer) self.viewModel.outputs.confirmPasswordLabel.observe(self.confirmPasswordLabel.observer) - - self.viewModel.inputs.configureWith("test@email.com") - self.viewModel.inputs.viewDidLoad() + self.viewModel.outputs.textFieldsAndSaveButtonAreEnabled + .observe(self.textFieldsAndSaveButtonAreEnabled.observer) + self.viewModel.outputs.setPasswordSuccess.observe(self.setPasswordSuccess.observer) + self.viewModel.outputs.setPasswordFailure.observe(self.setPasswordFailure.observer) } - func test_init() { - self.contextLabelText - .assertValue("We will be discontinuing the ability to log in via Facebook. To log in to your account using the email test@email.com, please set a password that’s at least 6 characters long.") - self.newPasswordLabel.assertValue("Enter new password") - self.confirmPasswordLabel.assertValue("Re-enter new password") - XCTAssertNil(self.saveButtonIsEnabled.lastValue) + func test_init_setsInitialTextLabelAndSaveButtonStates() { + let userEnvelope = UserEnvelope(me: GraphUser.template) + + withEnvironment(apiService: MockService(fetchGraphUserResult: .success(userEnvelope))) { + self.viewModel.inputs.viewDidLoad() + self.viewModel.inputs.viewWillAppear() + + self.scheduler.advance() + + self.contextLabelText + .assertValue(Strings + .We_will_be_discontinuing_the_ability_to_log_in_via_Facebook(email: userEnvelope.me.email ?? "")) + self.newPasswordLabel.assertValue(Strings.New_password()) + self.confirmPasswordLabel.assertValue(Strings.Confirm_password()) + + XCTAssertNil(self.saveButtonIsEnabled.lastValue) + } } func test_saveButtonIsEnabledWhenFormIsValid() { @@ -49,4 +77,54 @@ final class SetYourPasswordViewModelTests: TestCase { self.saveButtonIsEnabled.assertLastValue(true) } + + func testChangePassword_Success() { + withEnvironment(apiService: self.setPasswordSuccessService) { + self.viewModel.inputs.viewDidLoad() + + self.viewModel.inputs.newPasswordFieldDidChange("password") + self.viewModel.inputs.confirmPasswordFieldDidChange("password") + + self.saveButtonIsEnabled.assertValues([true]) + self.shouldShowActivityIndicator.assertValues([]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([]) + + self.viewModel.inputs.saveButtonPressed() + self.shouldShowActivityIndicator.assertValues([true]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([false]) + + self.scheduler.advance() + + self.setPasswordSuccess.assertValueCount(1) + self.setPasswordFailure.assertValueCount(0) + + self.shouldShowActivityIndicator.assertValues([true, false]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([false, true]) + } + } + + func testChangePassword_Failure() { + withEnvironment(apiService: self.setPasswordFailureService) { + self.viewModel.inputs.viewDidLoad() + + self.viewModel.inputs.newPasswordFieldDidChange("password") + self.viewModel.inputs.confirmPasswordFieldDidChange("password") + + self.saveButtonIsEnabled.assertValues([true]) + self.shouldShowActivityIndicator.assertValues([]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([]) + + self.viewModel.inputs.saveButtonPressed() + self.shouldShowActivityIndicator.assertValues([true]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([false]) + + self.scheduler.advance() + + self.setPasswordSuccess.assertValueCount(0) + self.setPasswordFailure.assertValueCount(1) + + self.shouldShowActivityIndicator.assertValues([true, false]) + self.textFieldsAndSaveButtonAreEnabled.assertValues([false, true]) + } + } } diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone4_7inch@2x.png index af3b310c73..60712d8d4d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone5_8inch@2x.png index 6b67c7d7ad..c5c67547ff 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.FindFriendsViewControllerTests/testView_ShowFriends_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_pad@2x.png index 6b6fcaad42..51cd202d79 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_phone4_7inch@2x.png index 5d3cfee872..cbbd2715b9 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_pad@2x.png index ac36a53ba6..09bc54e5e0 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_phone4_7inch@2x.png index c38e16a808..9922538738 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_pad@2x.png index 1057a1f9c7..e1b661e85a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_phone4_7inch@2x.png index fd1325ca2d..69df43efda 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_pad@2x.png index 2aad38e912..aee19fad81 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_phone4_7inch@2x.png index 603ee0712a..2bc9d6b695 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_pad@2x.png index c184510c89..b77c5d5cd3 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_phone4_7inch@2x.png index f4d8cd6409..93e314f10d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardLoadingState_Success_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_pad@2x.png index 0ba84a1119..d12cc5f727 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_phone4_7inch@2x.png index 61020606d0..94b046255c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_pad@2x.png index cb90488e50..f17c11a5ef 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_phone4_7inch@2x.png index 33b4703983..f5d538a963 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_pad@2x.png index d3e135b625..3a9cf34b00 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_phone4_7inch@2x.png index 1253ea3bbc..94f99ee3d2 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_pad@2x.png index a053e9afd8..2682a4ca72 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_phone4_7inch@2x.png index a4b7837d05..a19f6144da 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_pad@2x.png index 5457857b67..fccc51bed1 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_phone4_7inch@2x.png index bd895ee5d1..35ad13c857 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgePaymentMethodsViewControllerTests/testView_PledgeContext_AddNewCardNonLoadingState_Success_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_pad@2x.png index 5340c4142d..3cab6b3248 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch@2x.png index 32ea7297ee..1a487d8db8 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_pad@2x.png index 84cf638778..c77b78fe16 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch@2x.png index 9f94a93596..3339c96f14 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_pad@2x.png index a4667a9b18..61e976f20a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch@2x.png index 48a7c9d46d..d0932af1ef 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_pad@2x.png index 7c3d2ca2a2..07769892ea 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch@2x.png index 8f2c217f6c..3fc40039e4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_pad@2x.png index d6befd31df..c09037753f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch@2x.png index dd2b220eb2..aff79dedac 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_pad@2x.png index ba6ccea8d0..b19098cf48 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch@2x.png index 3921736985..63a7e851e8 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_pad@2x.png index 82830a2fe4..02a39fae73 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch@2x.png index 6480b15aa1..33fee93aed 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_pad@2x.png index fd10738715..aa634a1cdc 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch@2x.png index a127f0ce62..38826f9b8b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_pad@2x.png index b2ae3464eb..1ccee79f70 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch@2x.png index 996e97c2df..b4375e3b6a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_pad@2x.png index 7468a7e80a..da4b151aa6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch@2x.png index d914c770df..373269733f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_pad@2x.png index 4103e4f2af..b3c72111f5 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png index a8caec3465..3c487e56e6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png index 0bfc675ac8..3b1b53bfef 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_pad@2x.png index ddaefe8636..af1d946efa 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png index 103ad66a38..80f7e2e235 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png index 4b046f00d3..015141eaad 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png index 808b4a72fc..5cad59e829 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_pad@2x.png index 1dae947c8e..0ac47c6d5f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png index 2bcbedddd2..02255477f1 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png index b4a4e791e2..9c7fe0ecbd 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png index d97201a880..c50b7779d7 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_pad@2x.png index fd4835b35d..f79153c24e 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png index 07e89c59ac..e2b832dc2b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png index 44bd22302e..87359b5b31 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_pad@2x.png index 1ef8573beb..eefc41c486 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png index dc61392f9e..5763c2cb40 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png index 5f698e0c54..1a70a9ad96 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png index f892beca13..352ec5cd73 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_ChangePaymentMethodContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_FixPaymentMethod_ErroredCard_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_FixPaymentMethod_ErroredCard_lang_en_device_phone4_7inch@2x.png index c27598d3d1..d71a5e8adb 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_FixPaymentMethod_ErroredCard_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_FixPaymentMethod_ErroredCard_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_pad_LoggedIn@2x.png index 3fff24ba8c..9eab4614e8 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch_LoggedIn@2x.png index eeee295526..430dcdc5fe 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_de_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_pad_LoggedIn@2x.png index 9520328243..2480afe2b2 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch_LoggedIn@2x.png index 64d6c38b85..abeb75eac0 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_en_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_pad_LoggedIn@2x.png index d359b4c8b1..3d9286c869 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch_LoggedIn@2x.png index 6725eef078..9b15e81456 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_es_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_pad_LoggedIn@2x.png index 055d8f3f5a..366d0084dc 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch_LoggedIn@2x.png index 9cb0419146..004e9cc140 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_fr_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_pad_LoggedIn@2x.png index 9ac1c19489..c262ff5bc4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch_LoggedIn@2x.png index caf8f2f44c..fdde4674b7 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsFalse_lang_ja_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_pad_LoggedIn@2x.png index 5fe404a39f..74c9cf7897 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch_LoggedIn@2x.png index 063e794bd3..1f49e79408 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_de_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_pad_LoggedIn@2x.png index 3238dd0506..b4eb4df7e0 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch_LoggedIn@2x.png index 4a2a699f2c..50926520ec 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_en_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_pad_LoggedIn@2x.png index a935d59de4..ede0b80830 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch_LoggedIn@2x.png index 5651f20a17..f6f2244fb9 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_es_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_pad_LoggedIn@2x.png index c6de94fa14..ba5d3a9a29 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch_LoggedIn@2x.png index b9c420daa7..39e160b006 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_fr_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_pad_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_pad_LoggedIn@2x.png index c7239b9aee..dfdd78240b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_pad_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_pad_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch_LoggedIn@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch_LoggedIn@2x.png index ca45ea9001..6cd560b732 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch_LoggedIn@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_NeedsConversion_IsTrue_lang_ja_device_phone4_7inch_LoggedIn@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_pad@2x.png index 465d449842..601327274a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4_7inch@2x.png index 31a3a08980..048a013f7f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4inch@2x.png index d3be24a83c..a749769648 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_5inch@2x.png index 8c9debed42..213fcaeac9 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_8inch@2x.png index 31a3a08980..048a013f7f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_pad@2x.png index 91f33f0e93..57a5205792 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4_7inch@2x.png index 07f3bb57e8..fe66a1ed27 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4inch@2x.png index 3c174e4359..f08bdfc321 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_5inch@2x.png index b46815ddf0..da84a10a87 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_8inch@2x.png index 07f3bb57e8..fe66a1ed27 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_pad@2x.png index 9b52aef9ed..4c872ef033 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4_7inch@2x.png index 1977132bd8..2b46a1e536 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4inch@2x.png index c9c3462073..ef18b2115b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_5inch@2x.png index a2cf8f755d..81159f1902 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_8inch@2x.png index 1977132bd8..2b46a1e536 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_pad@2x.png index 1f94b67c18..48e580c922 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4_7inch@2x.png index 8585108d58..9a82907605 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4inch@2x.png index 6aab25360e..883bbec047 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_5inch@2x.png index 963bfc68eb..188f21474f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_8inch@2x.png index 8585108d58..9a82907605 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_pad@2x.png index e587db7973..2829d6e7c4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4_7inch@2x.png index 5f3bb7d53a..ba1052fcea 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4inch@2x.png index 8c632db361..dab85f539d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_5inch@2x.png index 9bfcce9bb1..0edfb3b552 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_8inch@2x.png index 5f3bb7d53a..ba1052fcea 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_OptimizelyExperiementVariant1Enabled_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_pad@2x.png index 4f565f7701..60db9b6f30 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4_7inch@2x.png index f590ed9ff4..abecfaa0ac 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4inch@2x.png index cc6b8efe46..83bc33f844 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png index 6277c25ee6..d87e470c62 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png index f590ed9ff4..abecfaa0ac 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_pad@2x.png index 844436182b..51b3a5a3a6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png index 3a3fd7a2bc..79b305f10f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4inch@2x.png index 0ef1aa875c..a0a688747f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png index 723b812ef4..7c9bfa71ac 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png index 3a3fd7a2bc..79b305f10f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_pad@2x.png index cb7b479868..d5388d878c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png index 75ae13dd52..37a67d9b77 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4inch@2x.png index 655fc0ccb9..ba7adac3cb 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png index b0bbb05129..b2b61bfb65 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png index 75ae13dd52..37a67d9b77 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_pad@2x.png index 79c0e3ffe1..81b8e018fc 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4_7inch@2x.png index 271c58cbbb..63868f4e75 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4inch@2x.png index f94dba8c77..c851f19857 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png index 05e361cb69..b93bedd855 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png index 271c58cbbb..63868f4e75 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_pad@2x.png index 33751986d8..1f48b7f443 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png index 7a4c2f557b..a86d3b4a9b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4inch@2x.png index e16b4afba7..a847e5c5c3 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png index 8a83a0a49d..6abb4e117c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png index 7a4c2f557b..a86d3b4a9b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.PledgeViewControllerTests/testView_PledgeContext_UnavailableStoredCards_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_pad@2x.png new file mode 100644 index 0000000000..fccfa7e351 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..57e42a2420 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_pad@2x.png new file mode 100644 index 0000000000..61b169205d Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..4dd818296f Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_pad@2x.png new file mode 100644 index 0000000000..17887aa417 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..c4089a2318 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_pad@2x.png new file mode 100644 index 0000000000..c974575d3b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..f66cc7b2ee Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_pad@2x.png new file mode 100644 index 0000000000..0c3c27a9ad Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..bf85ccdae0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testSetYourPasswordViewController_DisabledSave_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_pad@2x.png deleted file mode 100644 index 186f3a153d..0000000000 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_pad@2x.png and /dev/null differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_phone4_7inch@2x.png deleted file mode 100644 index a2588e4072..0000000000 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SetYourPasswordViewControllerTests/testView_lang_en_device_phone4_7inch@2x.png and /dev/null differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_pad@2x.png index 9ff8fe7726..40cec74e3a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone4_7inch@2x.png index 40f99184e7..b74d278afa 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone5_8inch@2x.png index 7da7e2c0d8..fe992cafda 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedIn_And_RequestDataCopy_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_pad@2x.png index c273d88f7f..d6444b622e 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone4_7inch@2x.png index 58f274fc0b..7fc77b3c97 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone5_8inch@2x.png index 8ca13ef218..6a90787721 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.SettingsPrivacyViewControllerTests/testSocialOptedOut_And_DownloadDataCopy_lang_de_device_phone5_8inch@2x.png differ