diff --git a/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings b/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings index 727454bcde..cfdc724fc3 100644 --- a/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/Base.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Any_payment_methods_you_saved_to_Kickstarter" = "Any payment methods you've saved to Kickstarter are listed here (securely) for your convenience."; "App_version" = "App version"; "Are_you_sure" = "Are you sure?"; +"Are_you_sure_you_wish_to_remove_this_card" = "Are you sure you wish to remove this card from your payment method options?"; "Ask_me_anything" = "Ask me anything"; "Available_to_watch_for_time_more_units" = "Available to watch for %{time} more %{units}"; "Back" = "Back"; @@ -249,6 +250,7 @@ "Messages" = "Messages"; "Name" = "Name"; "Never" = "Never"; +"New_email" = "New email"; "New_password" = "New password"; "New_pledge_activity" = "New pledge activity"; "New_work_and_big_ideas_from_established_and" = "New work and big ideas from established and emerging artists."; @@ -257,6 +259,7 @@ "No_Results" = "No Results"; "No_comments_yet" = "No comments yet."; "No_messages" = "No messages"; +"No_nevermind" = "No, nevermind"; "No_one_has_posted_an_update_yet" = "No one has posted an update yet."; "No_pledges_from_friends_yet" = "No pledges\nfrom friends yet."; "No_replay_is_available_for_this_live_stream" = "No replay is available for this live stream."; @@ -335,6 +338,7 @@ "Recommended_For_You" = "Recommended For You"; "Recorded_Live" = "Recorded Live"; "Recorded_live_with_creator_name" = "Recorded live with %{creator_name}"; +"Remove_this_card" = "Remove this card"; "Replay" = "Replay"; "Replay_available_for_time_more_units" = "Replay available for %{time} more %{units}"; "Replay_live_stream_with_creator_name" = "Replay live stream with
%{creator_name}"; @@ -460,6 +464,7 @@ "When_you_save_a_project_we_ll_send_you_a_reminder" = "When you save a project we’ll send you a reminder 48 hours before it ends"; "Write_a_bio" = "Write a short bio. Just a sentence or two is great."; "Yes_change_currency" = "Yes, Change currency"; +"Yes_remove" = "Yes, remove"; "Yes_turn_off" = "Yes, turn off"; "You_Launched" = "You Launched!"; "You_backed_this_project" = "You backed this project."; diff --git a/Kickstarter-iOS/Locales/de.lproj/Localizable.strings b/Kickstarter-iOS/Locales/de.lproj/Localizable.strings index 3e0482fca5..7541527b6d 100644 --- a/Kickstarter-iOS/Locales/de.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/de.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Any_payment_methods_you_saved_to_Kickstarter" = "Sämtliche auf Kickstarter gespeicherten Zahlungsmethoden sind hier (sicher) hinterlegt."; "App_version" = "App-Version"; "Are_you_sure" = "Bist du sicher?"; +"Are_you_sure_you_wish_to_remove_this_card" = "Are you sure you wish to remove this card from your payment method options?"; "Ask_me_anything" = "Frage stellen"; "Available_to_watch_for_time_more_units" = "Kann noch %{time} %{units} angesehen werden"; "Back" = "Zurück"; @@ -249,6 +250,7 @@ "Messages" = "Nachrichten"; "Name" = "Name"; "Never" = "Niemals"; +"New_email" = "New email"; "New_password" = "Neues Passwort"; "New_pledge_activity" = "Neue Finanzierungsbeiträge"; "New_work_and_big_ideas_from_established_and" = "Neue Arbeiten und großartige Ideen von etablierten und neuen Künstlern."; @@ -257,6 +259,7 @@ "No_Results" = "Keine Ergebnisse"; "No_comments_yet" = "Bisher noch keine Kommentare."; "No_messages" = "Keine Nachrichten"; +"No_nevermind" = "No, nevermind"; "No_one_has_posted_an_update_yet" = "Es wurden noch keine Updates gepostet."; "No_pledges_from_friends_yet" = "Es gibt noch keine Beiträge von Freunden."; "No_replay_is_available_for_this_live_stream" = "Keine Wiedergabe verügbar für diesen Live-Stream."; @@ -335,6 +338,7 @@ "Recommended_For_You" = "Empfehlungen für dich"; "Recorded_Live" = "Live aufgenommen"; "Recorded_live_with_creator_name" = "Live aufgenommen von %{creator_name}"; +"Remove_this_card" = "Remove this card"; "Replay" = "Wiedergabe"; "Replay_available_for_time_more_units" = "Wiedergabe verfügbar für weitere %{time} %{units}"; "Replay_live_stream_with_creator_name" = "Wiedergabe des Live-Streams von
%{creator_name}"; @@ -460,6 +464,7 @@ "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"; "Write_a_bio" = "Schreibe eine kurze Biografie, ein oder zwei Sätze genügen."; "Yes_change_currency" = "Ja, Währung ändern"; +"Yes_remove" = "Yes, remove"; "Yes_turn_off" = "Ja, deaktivieren"; "You_Launched" = "Dein Projekt ist live!"; "You_backed_this_project" = "Du hast dieses Projekt unterstützt."; diff --git a/Kickstarter-iOS/Locales/es.lproj/Localizable.strings b/Kickstarter-iOS/Locales/es.lproj/Localizable.strings index 89e35562e5..f45f5489e1 100644 --- a/Kickstarter-iOS/Locales/es.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/es.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Any_payment_methods_you_saved_to_Kickstarter" = "Para tu comodidad, aquí se enumeran (de manera absolutamente segura) los métodos de pago que guardaste en Kickstarter."; "App_version" = "Versión de la aplicación"; "Are_you_sure" = "¿Estás seguro?"; +"Are_you_sure_you_wish_to_remove_this_card" = "Are you sure you wish to remove this card from your payment method options?"; "Ask_me_anything" = "¡Pregúntame!"; "Available_to_watch_for_time_more_units" = "Disponible para reproducción %{time} %{units} más"; "Back" = "Atrás"; @@ -249,6 +250,7 @@ "Messages" = "Mensajes"; "Name" = "Nombre"; "Never" = "Nunca"; +"New_email" = "New email"; "New_password" = "Contraseña nueva"; "New_pledge_activity" = "Nueva actividad de contribución"; "New_work_and_big_ideas_from_established_and" = "Nuevos trabajos y grandes ideas de artistas establecidos y emergentes."; @@ -257,6 +259,7 @@ "No_Results" = "Sin resultados"; "No_comments_yet" = "No hay comentarios todavia."; "No_messages" = "No hay mensajes"; +"No_nevermind" = "No, nevermind"; "No_one_has_posted_an_update_yet" = "Todavía no se han publicado actualizaciones."; "No_pledges_from_friends_yet" = "Todavía no hay contribuciones de amigos."; "No_replay_is_available_for_this_live_stream" = "Este Live Stream no cuenta con repetición."; @@ -335,6 +338,7 @@ "Recommended_For_You" = "Recomendaciones para ti"; "Recorded_Live" = "Grabado en vivo"; "Recorded_live_with_creator_name" = "Grabado en vivo por %{creator_name}"; +"Remove_this_card" = "Remove this card"; "Replay" = "Repetición"; "Replay_available_for_time_more_units" = "Repetición disponible por %{time} %{units} más"; "Replay_live_stream_with_creator_name" = "Repetir live stream de
%{creator_name}"; @@ -460,6 +464,7 @@ "When_you_save_a_project_we_ll_send_you_a_reminder" = "Cuando guardes un proyecto, te enviaremos un recordatorio por correo electrónico 48 horas antes de que finalice"; "Write_a_bio" = "Escribe una biografía breve mediante una oración o dos."; "Yes_change_currency" = "Sí, cambiar la moneda"; +"Yes_remove" = "Yes, remove"; "Yes_turn_off" = "Sí, desactivar"; "You_Launched" = "¡Tu proyecto fue publicado!"; "You_backed_this_project" = "Patrocinaste este proyecto."; diff --git a/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings b/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings index 66b75853a8..55165b4170 100644 --- a/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/fr.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Any_payment_methods_you_saved_to_Kickstarter" = "Voici une liste (sécurisée) de tous les moyens de paiement que vous avez ajoutés à votre compte Kickstarter."; "App_version" = "Version de l'application"; "Are_you_sure" = "Êtes-vous certain ?"; +"Are_you_sure_you_wish_to_remove_this_card" = "Are you sure you wish to remove this card from your payment method options?"; "Ask_me_anything" = "Posez-moi une question !"; "Available_to_watch_for_time_more_units" = "Plus que %{time}%{units} pour regarder cette diffusion"; "Back" = "Retour"; @@ -249,6 +250,7 @@ "Messages" = "Messages"; "Name" = "Nom"; "Never" = "Jamais"; +"New_email" = "New email"; "New_password" = "Nouveau mot de passe"; "New_pledge_activity" = "Nouveaux engagements"; "New_work_and_big_ideas_from_established_and" = "Grandes idées et nouveaux travaux signés par des artistes établis et émergents."; @@ -257,6 +259,7 @@ "No_Results" = "Pas de résultats"; "No_comments_yet" = "Pas de commentaires."; "No_messages" = "Pas de messages"; +"No_nevermind" = "No, nevermind"; "No_one_has_posted_an_update_yet" = "Pas d'actus publiées pour le moment."; "No_pledges_from_friends_yet" = "Mes amis \nn'ont rien soutenu."; "No_replay_is_available_for_this_live_stream" = "Pas de rediffusion possible pour cette diffusion en direct."; @@ -335,6 +338,7 @@ "Recommended_For_You" = "Rien que pour vous"; "Recorded_Live" = "Enregistré en direct"; "Recorded_live_with_creator_name" = "Enregistré en direct avec %{creator_name}"; +"Remove_this_card" = "Remove this card"; "Replay" = "Rediffuser"; "Replay_available_for_time_more_units" = "Rediffusion encore disponible pendant %{time} %{units}"; "Replay_live_stream_with_creator_name" = "Revoir la diffusion en direct de
%{creator_name}"; @@ -460,6 +464,7 @@ "When_you_save_a_project_we_ll_send_you_a_reminder" = "Pour chaque projet que vous enregistrez, nous vous enverrons un rappel 48 heures avant la fin de sa campagne."; "Write_a_bio" = "Une petite biographie d'une phrase ou deux."; "Yes_change_currency" = "Oui, changer de devise"; +"Yes_remove" = "Yes, remove"; "Yes_turn_off" = "Oui, désactiver"; "You_Launched" = "Projet lancé !"; "You_backed_this_project" = "Vous avez soutenu ce projet."; diff --git a/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings b/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings index 7e3a54dabc..d6c40b2d58 100644 --- a/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings +++ b/Kickstarter-iOS/Locales/ja.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Any_payment_methods_you_saved_to_Kickstarter" = "Kickstarter に保存されたお支払い方法は、こちらに (安全に) リストアップされます。"; "App_version" = "アプリ版"; "Are_you_sure" = "オフにしてもよろしいですか?"; +"Are_you_sure_you_wish_to_remove_this_card" = "Are you sure you wish to remove this card from your payment method options?"; "Ask_me_anything" = "お問い合わせ"; "Available_to_watch_for_time_more_units" = "さらに%{time} の%{units} を見ることができます"; "Back" = "バック"; @@ -249,6 +250,7 @@ "Messages" = "メッセージ"; "Name" = "名前"; "Never" = "通知を受けない"; +"New_email" = "New email"; "New_password" = "新しいパスワード"; "New_pledge_activity" = "新しいプレッジ"; "New_work_and_big_ideas_from_established_and" = "新進アーティストや著名アーティストの最新プロジェクトやアイデアをご紹介。"; @@ -257,6 +259,7 @@ "No_Results" = "該当結果なし"; "No_comments_yet" = "まだコメントはありません。"; "No_messages" = "メッセージがありません。"; +"No_nevermind" = "No, nevermind"; "No_one_has_posted_an_update_yet" = "まだアップデートの投稿はありません。"; "No_pledges_from_friends_yet" = "友達からのプレッジはありません。"; "No_replay_is_available_for_this_live_stream" = "このライブ配信を再生することはできません"; @@ -335,6 +338,7 @@ "Recommended_For_You" = "あなたへのおすすめ"; "Recorded_Live" = "配信済ライブ"; "Recorded_live_with_creator_name" = "配信された%{creator_name}のライブ"; +"Remove_this_card" = "Remove this card"; "Replay" = "リプレイ"; "Replay_available_for_time_more_units" = "あと%{time}%{units} リプレイ可能"; "Replay_live_stream_with_creator_name" = "%{creator_name}のライブ配信を再生"; @@ -460,6 +464,7 @@ "When_you_save_a_project_we_ll_send_you_a_reminder" = "プロジェクトを保存し、終了の48時間前にリマインドする。"; "Write_a_bio" = "簡単な自己紹介を書いてください。ほんの1~2文で構いません。"; "Yes_change_currency" = "はい、通貨を変更します"; +"Yes_remove" = "Yes, remove"; "Yes_turn_off" = "はい、オフにします"; "You_Launched" = "発表されました!"; "You_backed_this_project" = "バック済"; diff --git a/Kickstarter-iOS/Views/Controllers/AddNewCardViewController.swift b/Kickstarter-iOS/Views/Controllers/AddNewCardViewController.swift index 96322d47bd..4eaaaeb7be 100644 --- a/Kickstarter-iOS/Views/Controllers/AddNewCardViewController.swift +++ b/Kickstarter-iOS/Views/Controllers/AddNewCardViewController.swift @@ -2,21 +2,15 @@ import KsApi import Library import Prelude import ReactiveSwift +import Stripe import UIKit -internal final class AddNewCardViewController: UIViewController { - @IBOutlet fileprivate weak var cardNumberLabel: UILabel! - @IBOutlet fileprivate weak var cardNumberTextField: UITextField! - @IBOutlet fileprivate weak var cardholderNameLabel: UILabel! - @IBOutlet fileprivate weak var cardholderNameTextField: UITextField! - @IBOutlet fileprivate weak var expirationLabel: UILabel! - @IBOutlet fileprivate weak var expirationTextField: UITextField! - @IBOutlet fileprivate weak var securityCodeLabel: UILabel! - @IBOutlet fileprivate weak var securityCodeTextField: UITextField! - @IBOutlet fileprivate weak var zipCodeLabel: UILabel! - @IBOutlet fileprivate weak var zipCodeTextField: UITextField! +internal final class AddNewCardViewController: UIViewController, STPPaymentCardTextFieldDelegate { private weak var saveButtonView: LoadingBarButtonItemView! + @IBOutlet private weak var cardholderNameLabel: UILabel! + @IBOutlet private weak var cardholderNameTextField: UITextField! + @IBOutlet private weak var paymentField: STPPaymentCardTextField! internal static func instantiate() -> AddNewCardViewController { return Storyboard.Settings.instantiate(AddNewCardViewController.self) @@ -37,6 +31,8 @@ internal final class AddNewCardViewController: UIViewController { self.saveButtonView.addTarget(self, action: #selector(saveButtonTapped)) let navigationBarButton = UIBarButtonItem(customView: self.saveButtonView) self.navigationItem.setRightBarButton(navigationBarButton, animated: false) + + self.paymentField.delegate = self } override func bindStyles() { @@ -45,42 +41,23 @@ internal final class AddNewCardViewController: UIViewController { _ = self |> settingsViewControllerStyle - _ = [self.cardNumberTextField, self.cardholderNameTextField, self.expirationTextField, - self.securityCodeTextField, self.zipCodeTextField] - ||> formFieldStyle - ||> \.textAlignment .~ .right - - _ = [self.cardNumberLabel, self.cardholderNameLabel, self.expirationLabel, - self.securityCodeLabel, self.zipCodeLabel] - ||> settingsTitleLabelStyle - - _ = [self.cardNumberTextField, self.expirationTextField, self.securityCodeTextField, - self.zipCodeTextField] - ||> \.keyboardType .~ .numberPad - - _ = self.cardNumberLabel - |> \.text %~ { _ in Strings.Card_number() } - _ = self.cardholderNameLabel + |> settingsSectionLabelStyle |> \.text %~ { _ in Strings.Cardholder_name() } - _ = self.expirationLabel - |> \.text %~ { _ in Strings.Expiration() } - - _ = self.securityCodeLabel - |> \.text %~ { _ in Strings.Security_code() } - - _ = self.zipCodeLabel - |> \.text %~ { _ in Strings.Zip_code() } - _ = self.cardholderNameTextField - |> \.placeholder %~ { _ in Strings.Name() } - - _ = self.expirationTextField - |> \.placeholder %~ { _ in Strings.MMYY() } - - _ = self.securityCodeTextField - |> \.placeholder %~ { _ in Strings.CVC() } + |> formFieldStyle + |> \.textAlignment .~ .right + |> \.attributedPlaceholder .~ NSAttributedString( + string: Strings.Name(), + attributes: [NSAttributedString.Key.foregroundColor: UIColor.ksr_text_dark_grey_400]) + + _ = self.paymentField + |> \.borderColor .~ nil + |> \.font .~ .ksr_body() + |> \.cursorColor .~ .ksr_green_700 + |> \.textColor .~ .ksr_text_dark_grey_500 + |> \.placeholderColor .~ .ksr_text_dark_grey_400 } @objc fileprivate func cancelButtonTapped() { diff --git a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift index 765423ce5a..0fdcac573e 100644 --- a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift +++ b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewController.swift @@ -7,18 +7,17 @@ import UIKit internal final class ChangeEmailViewController: UIViewController { @IBOutlet fileprivate weak var currentEmailLabel: UILabel! @IBOutlet fileprivate weak var currentEmail: UILabel! - @IBOutlet fileprivate weak var errorLabel: UILabel! - @IBOutlet fileprivate weak var errorView: UIView! + @IBOutlet fileprivate weak var messageLabelView: UIView! @IBOutlet fileprivate weak var newEmailLabel: UILabel! @IBOutlet fileprivate weak var newEmailTextField: UITextField! @IBOutlet fileprivate weak var onePasswordButton: UIButton! @IBOutlet fileprivate weak var passwordLabel: UILabel! @IBOutlet fileprivate weak var passwordTextField: UITextField! @IBOutlet fileprivate weak var resendVerificationEmailButton: UIButton! - @IBOutlet fileprivate weak var resendVerificationStackView: UIStackView! - + @IBOutlet fileprivate weak var resendVerificationEmailView: UIView! @IBOutlet fileprivate weak var scrollView: UIScrollView! - @IBOutlet fileprivate weak var resendVerificationEmailStackView: UIStackView! + @IBOutlet fileprivate weak var unverifiedEmailLabel: UILabel! + @IBOutlet fileprivate weak var warningMessageLabel: UILabel! private let viewModel: ChangeEmailViewModelType = ChangeEmailViewModel() private var messageBannerView: MessageBannerViewController! @@ -63,46 +62,54 @@ internal final class ChangeEmailViewController: UIViewController { _ = self |> settingsViewControllerStyle - |> UIViewController.lens.title %~ { _ in + |> \.title %~ { _ in Strings.Change_email() } - _ = onePasswordButton + _ = self.onePasswordButton |> onePasswordButtonStyle - _ = errorLabel + _ = self.messageLabelView + |> \.backgroundColor .~ .ksr_grey_200 + + _ = self.unverifiedEmailLabel |> settingsDescriptionLabelStyle - |> UILabel.lens.text %~ { _ in Strings.Email_unverified() } + |> \.text %~ { _ in Strings.Email_unverified() } - _ = currentEmailLabel + _ = self.warningMessageLabel + |> settingsDescriptionLabelStyle + |> \.textColor .~ .ksr_red_400 + |> \.text %~ { _ in Strings.We_ve_been_unable_to_send_email() } + + _ = self.currentEmailLabel |> settingsTitleLabelStyle + |> \.text %~ { _ in Strings.Current_email() } - _ = currentEmail + _ = self.currentEmail |> settingsDetailLabelStyle - _ = newEmailLabel + _ = self.newEmailLabel |> settingsTitleLabelStyle + |> \.text %~ { _ in Strings.New_email() } - _ = newEmailTextField + _ = self.newEmailTextField |> formFieldStyle - |> UITextField.lens.returnKeyType .~ .next - |> UITextField.lens.textAlignment .~ .right - |> UITextField.lens.placeholder %~ { _ in + |> \.returnKeyType .~ .next + |> \.textAlignment .~ .right + |> \.placeholder %~ { _ in Strings.login_placeholder_email() } - _ = passwordLabel + _ = self.passwordLabel |> settingsTitleLabelStyle + |> \.text %~ { _ in Strings.Current_password() } - _ = resendVerificationStackView - |> \.isHidden .~ true - - _ = passwordTextField + _ = self.passwordTextField |> passwordFieldStyle |> \.textAlignment .~ .right |> \.returnKeyType .~ .go - _ = resendVerificationEmailButton + _ = self.resendVerificationEmailButton |> UIButton.lens.titleLabel.font .~ .ksr_body() |> UIButton.lens.titleColor(for: .normal) .~ .ksr_text_green_700 } @@ -110,13 +117,13 @@ internal final class ChangeEmailViewController: UIViewController { override func bindViewModel() { super.bindViewModel() - self.resendVerificationStackView.rac.hidden = self.viewModel.outputs.resendVerificationStackViewIsHidden self.currentEmail.rac.text = self.viewModel.outputs.emailText - + self.resendVerificationEmailView.rac.hidden = self.viewModel.outputs.resendVerificationEmailViewIsHidden self.resendVerificationEmailButton.rac.title = self.viewModel.outputs.verificationEmailButtonTitle - self.onePasswordButton.rac.hidden = self.viewModel.outputs.onePasswordButtonIsHidden - + self.messageLabelView.rac.hidden = self.viewModel.outputs.messageLabelViewHidden + self.unverifiedEmailLabel.rac.hidden = self.viewModel.outputs.unverifiedEmailLabelHidden + self.warningMessageLabel.rac.hidden = self.viewModel.outputs.warningMessageLabelHidden self.passwordTextField.rac.text = self.viewModel.outputs.passwordText self.viewModel.outputs.activityIndicatorShouldShow diff --git a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewControllerTests.swift b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewControllerTests.swift index ebb457fe5e..8f0d2bbaf7 100644 --- a/Kickstarter-iOS/Views/Controllers/ChangeEmailViewControllerTests.swift +++ b/Kickstarter-iOS/Views/Controllers/ChangeEmailViewControllerTests.swift @@ -19,10 +19,63 @@ final class ChangeEmailViewControllerTests: TestCase { func testChangeEmail() { combos(Language.allLanguages, Device.allCases).forEach { language, device in - withEnvironment(language: language) { + withEnvironment(currentUser: User.template, language: language) { let controller = ChangeEmailViewController.instantiate() let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller) + scheduler.advance() + + FBSnapshotVerifyView(parent.view, identifier: "lang_\(language)_device_\(device)") + } + } + } + + func testChangeEmailScreen_unverifiedEmail() { + let userEnvelope = UserEnvelope(me: UserEmailFields.template |> \.isEmailVerified .~ false) + let service = MockService(changeEmailResponse: userEnvelope) + combos(Language.allLanguages, Device.allCases).forEach { language, device in + withEnvironment(apiService: service, currentUser: User.template, language: language) { + let controller = ChangeEmailViewController.instantiate() + let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller) + + scheduler.advance() + + FBSnapshotVerifyView(parent.view, identifier: "lang_\(language)_device_\(device)") + } + } + } + + func testChangeEmailScreen_unverifiedEmail_isCreator() { + let creator = User.template + |> \.stats.createdProjectsCount .~ 3 + let userEnvelope = UserEnvelope(me: UserEmailFields.template |> \.isEmailVerified .~ false) + + combos(Language.allLanguages, Device.allCases).forEach { language, device in + withEnvironment(apiService: MockService(changeEmailResponse: userEnvelope), + currentUser: creator, + language: language) { + let controller = ChangeEmailViewController.instantiate() + let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller) + + scheduler.advance() + + FBSnapshotVerifyView(parent.view, identifier: "lang_\(language)_device_\(device)") + } + } + } + + func testChangeEmailScreen_undeliverableEmail() { + let userEnvelope = UserEnvelope(me: UserEmailFields.template + |> \.isEmailVerified .~ false + |> \.isDeliverable .~ false) + let service = MockService(changeEmailResponse: userEnvelope) + combos(Language.allLanguages, Device.allCases).forEach { language, device in + withEnvironment(apiService: service, currentUser: User.template, language: language) { + let controller = ChangeEmailViewController.instantiate() + let (parent, _) = traitControllers(device: device, orientation: .portrait, child: controller) + + scheduler.advance() + FBSnapshotVerifyView(parent.view, identifier: "lang_\(language)_device_\(device)") } } diff --git a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard index 3f46b7be5c..5267de1d39 100644 --- a/Kickstarter-iOS/Views/Storyboards/Settings.storyboard +++ b/Kickstarter-iOS/Views/Storyboards/Settings.storyboard @@ -151,7 +151,7 @@ - + @@ -203,79 +203,81 @@ - - + + + + + - - - - - - - - - + + + + + + + + - - - - - - - + + - + + + + + + + - + - + - + - - + - @@ -405,16 +405,17 @@ - - + - + + + @@ -799,7 +800,7 @@ - + @@ -808,7 +809,7 @@ - + @@ -817,169 +818,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -991,14 +831,14 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1050,16 +927,9 @@ - - - - - - - - - - + + + diff --git a/Kickstarter.xcodeproj/project.pbxproj b/Kickstarter.xcodeproj/project.pbxproj index fe3c9b1c16..a022e2520d 100644 --- a/Kickstarter.xcodeproj/project.pbxproj +++ b/Kickstarter.xcodeproj/project.pbxproj @@ -1034,7 +1034,7 @@ D6DC65522178CDDD008CF69C /* GraphUserEmailTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6DC65512178CDDC008CF69C /* GraphUserEmailTemplate.swift */; }; D6E925CE211107CD00E13010 /* SettingsNewslettersDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6765B4C211091AB00AE3DB4 /* SettingsNewslettersDataSourceTests.swift */; }; D6ED1B37216D0C64007F7547 /* ChangeEmailViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B36216D0C64007F7547 /* ChangeEmailViewModelTests.swift */; }; - D6ED1B39216D50BE007F7547 /* GraphUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B38216D50BE007F7547 /* GraphUser.swift */; }; + D6ED1B39216D50BE007F7547 /* UserEmailFields.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */; }; D6ED1B3B216D525B007F7547 /* ChangeEmailInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B3A216D525B007F7547 /* ChangeEmailInput.swift */; }; D6ED1B3E216D61E0007F7547 /* UpdateUserAccountMutation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED1B3D216D61E0007F7547 /* UpdateUserAccountMutation.swift */; }; D6ED386A1F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ED38691F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift */; }; @@ -1056,6 +1056,10 @@ D7237099211A3DA9001EA4CA /* SettingsFollowCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7237097211A3925001EA4CA /* SettingsFollowCell.swift */; }; D7417CD620BF12F4004DABA6 /* ExportDataEnvelope.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7417CD520BF12F4004DABA6 /* ExportDataEnvelope.swift */; }; D7417D0E20BF4833004DABA6 /* ExportStateEnvelopeTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7417D0D20BF4833004DABA6 /* ExportStateEnvelopeTemplates.swift */; }; + D74E66B0212B7AB500C61708 /* SettingsViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74E66AF212B7AB500C61708 /* SettingsViewControllerTests.swift */; }; + D74E6758212CB5A400C61708 /* SettingsViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74E6757212CB5A400C61708 /* SettingsViewControllerTests.swift */; }; + D770DE75217E598C00B5319A /* AddNewCardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D770DE3D217E339500B5319A /* AddNewCardViewController.swift */; }; + D770DE78217E876000B5319A /* AddNewCardViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D770DE76217E874F00B5319A /* AddNewCardViewControllerTests.swift */; }; D770DDE8217D729300B5319A /* UserCurrencyTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = D770DDE7217D729300B5319A /* UserCurrencyTemplates.swift */; }; D770DE75217E598C00B5319A /* AddNewCardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D770DE3D217E339500B5319A /* AddNewCardViewController.swift */; }; D770DE78217E876000B5319A /* AddNewCardViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D770DE76217E874F00B5319A /* AddNewCardViewControllerTests.swift */; }; @@ -2762,7 +2766,7 @@ D6DC653221768B6E008CF69C /* ChangeEmailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangeEmailViewModel.swift; sourceTree = ""; }; D6DC65512178CDDC008CF69C /* GraphUserEmailTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphUserEmailTemplate.swift; sourceTree = ""; }; D6ED1B36216D0C64007F7547 /* ChangeEmailViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeEmailViewModelTests.swift; sourceTree = ""; }; - D6ED1B38216D50BE007F7547 /* GraphUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphUser.swift; sourceTree = ""; }; + D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEmailFields.swift; sourceTree = ""; }; D6ED1B3A216D525B007F7547 /* ChangeEmailInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeEmailInput.swift; sourceTree = ""; }; D6ED1B3D216D61E0007F7547 /* UpdateUserAccountMutation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateUserAccountMutation.swift; sourceTree = ""; }; D6ED38691F796C26006CAAE9 /* GraphCategoriesEnvelopeLenses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphCategoriesEnvelopeLenses.swift; sourceTree = ""; }; @@ -2785,6 +2789,8 @@ D7417D0D20BF4833004DABA6 /* ExportStateEnvelopeTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportStateEnvelopeTemplates.swift; sourceTree = ""; }; D74E66AF212B7AB500C61708 /* SettingsViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewControllerTests.swift; sourceTree = ""; }; D74E6757212CB5A400C61708 /* SettingsViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewControllerTests.swift; sourceTree = ""; }; + D770DE3D217E339500B5319A /* AddNewCardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddNewCardViewController.swift; sourceTree = ""; }; + D770DE76217E874F00B5319A /* AddNewCardViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddNewCardViewControllerTests.swift; sourceTree = ""; }; D76E9BEE2174EF580049F64E /* SettingsCurrencyCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCurrencyCellViewModel.swift; sourceTree = ""; }; D770DDE7217D729300B5319A /* UserCurrencyTemplates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserCurrencyTemplates.swift; sourceTree = ""; }; D770DE3D217E339500B5319A /* AddNewCardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddNewCardViewController.swift; sourceTree = ""; }; @@ -4254,6 +4260,7 @@ D01587921EEB2ED6006E7684 /* FindFriendsEnvelopeTests.swift */, D01587931EEB2ED6006E7684 /* FriendStatsEnvelope.swift */, D01587941EEB2ED6006E7684 /* FriendStatsEnvelopeTests.swift */, + D6ED1B38216D50BE007F7547 /* UserEmailFields.swift */, D002CAE4218CF951009783F2 /* GraphMutationWatchProjectResponseEnvelope.swift */, D6ED1B38216D50BE007F7547 /* GraphUser.swift */, D01587951EEB2ED6006E7684 /* Item.swift */, @@ -6399,7 +6406,7 @@ D015888D1EEB2ED7006E7684 /* ConfigLenses.swift in Sources */, D0158A1E1EEB30A2006E7684 /* ProjectStatsEnvelope.FundingDateStatsTemplates.swift in Sources */, D015899B1EEB2ED7006E7684 /* Service.swift in Sources */, - D6ED1B39216D50BE007F7547 /* GraphUser.swift in Sources */, + D6ED1B39216D50BE007F7547 /* UserEmailFields.swift in Sources */, D01588731EEB2ED7006E7684 /* FindFriendsEnvelope.swift in Sources */, D63BBD31217F7212007E01F0 /* UserCreditCard.swift in Sources */, D01588A51EEB2ED7006E7684 /* Project.DatesLenses.swift in Sources */, diff --git a/KsApi/GraphSchema.swift b/KsApi/GraphSchema.swift index d72c3f6777..e429de90ec 100644 --- a/KsApi/GraphSchema.swift +++ b/KsApi/GraphSchema.swift @@ -207,6 +207,7 @@ public enum Query { case id case image(alias: String, width: Int) case imageUrl(alias: String, blur: Bool, width: Int) + case isEmailDeliverable case isEmailVerified case isFollowing case isSocializing @@ -395,6 +396,7 @@ extension Query.User: QueryType { case .id: return "id" case let .image(alias, width): return "\(alias): imageUrl(width: \(width))" case let .imageUrl(alias, blur, width): return "\(alias): imageUrl(blur: \(blur), width: \(width))" + case .isEmailDeliverable: return "isDeliverable" case .isEmailVerified: return "isEmailVerified" case .isFollowing: return "isFollowing" case .isSocializing: return "isSocializing" diff --git a/KsApi/MockService.swift b/KsApi/MockService.swift index 0134e5119e..0a792b703a 100644 --- a/KsApi/MockService.swift +++ b/KsApi/MockService.swift @@ -15,7 +15,7 @@ internal struct MockService: ServiceType { fileprivate let changeCurrencyError: GraphError? fileprivate let changeEmailError: GraphError? - fileprivate let changeEmailResponse: UserEnvelope? + fileprivate let changeEmailResponse: UserEnvelope? fileprivate let changePasswordError: GraphError? @@ -60,7 +60,7 @@ internal struct MockService: ServiceType { fileprivate let fetchDraftError: ErrorEnvelope? fileprivate let fetchGraphCurrencyResponse: UserCurrency? - fileprivate let fetchGraphUserEmailResponse: GraphUserEmail? + fileprivate let fetchGraphUserEmailResponse: UserEmailFields? fileprivate let fetchGraphCreditCardsResponse: UserEnvelope? fileprivate let fetchGraphCreditCardsError: GraphError? @@ -175,7 +175,7 @@ internal struct MockService: ServiceType { currency: String = "USD", buildVersion: String = "1", changeEmailError: GraphError? = nil, - changeEmailResponse: UserEnvelope? = UserEnvelope( + changeEmailResponse: UserEnvelope? = UserEnvelope( me: .template ), changePasswordError: GraphError? = nil, @@ -207,7 +207,7 @@ internal struct MockService: ServiceType { exportDataError: ErrorEnvelope? = nil, fetchDraftResponse: UpdateDraft? = nil, fetchDraftError: ErrorEnvelope? = nil, - fetchGraphUserEmailResponse: GraphUserEmail? = nil, + fetchGraphUserEmailResponse: UserEmailFields? = nil, fetchGraphCurrencyResponse: UserCurrency? = nil, addAttachmentResponse: UpdateDraft.Image? = nil, addAttachmentError: ErrorEnvelope? = nil, @@ -642,9 +642,9 @@ internal struct MockService: ServiceType { ) } - internal func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> { - return SignalProducer(value: changeEmailResponse ?? UserEnvelope(me: .template)) + internal func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> { + return SignalProducer(value: changeEmailResponse ?? UserEnvelope(me: .template)) } internal func fetchGraphCurrency(query: NonEmptySet) diff --git a/KsApi/Service.swift b/KsApi/Service.swift index 29147d1cad..3adbee39c7 100644 --- a/KsApi/Service.swift +++ b/KsApi/Service.swift @@ -218,8 +218,8 @@ public struct Service: ServiceType { return fetch(query: query) } - public func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> { + public func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> { return fetch(query: query) } diff --git a/KsApi/ServiceType.swift b/KsApi/ServiceType.swift index 6ad4e4b14a..e58cbade66 100644 --- a/KsApi/ServiceType.swift +++ b/KsApi/ServiceType.swift @@ -128,9 +128,9 @@ public protocol ServiceType { func fetchGraphCurrency(query: NonEmptySet) -> SignalProducer, GraphError> - /// Fetch User's email objects using graphQL. - func fetchGraphUserEmail(query: NonEmptySet) - -> SignalProducer, GraphError> + /// Fetch User's email fields object using graphQL. + func fetchGraphUserEmailFields(query: NonEmptySet) + -> SignalProducer, GraphError> /// Fetches all of the messages in a particular message thread. func fetchMessageThread(messageThreadId: Int) diff --git a/KsApi/models/GraphUser.swift b/KsApi/models/GraphUser.swift deleted file mode 100644 index 0380676290..0000000000 --- a/KsApi/models/GraphUser.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -public struct GraphUserEmail: Swift.Decodable { - - public let email: String -} diff --git a/KsApi/models/UserEmailFields.swift b/KsApi/models/UserEmailFields.swift new file mode 100644 index 0000000000..262637bc06 --- /dev/null +++ b/KsApi/models/UserEmailFields.swift @@ -0,0 +1,7 @@ +import Foundation + +public struct UserEmailFields: Swift.Decodable { + public private(set) var email: String + public private(set) var isEmailVerified: Bool? + public private(set) var isDeliverable: Bool? +} diff --git a/KsApi/models/templates/GraphUserEmailTemplate.swift b/KsApi/models/templates/GraphUserEmailTemplate.swift index 379a9c7898..6893dd34ab 100644 --- a/KsApi/models/templates/GraphUserEmailTemplate.swift +++ b/KsApi/models/templates/GraphUserEmailTemplate.swift @@ -1,6 +1,7 @@ import Foundation -extension GraphUserEmail { - - internal static let template = GraphUserEmail(email: "ksr@kickstarter.com") +extension UserEmailFields { + internal static let template = UserEmailFields(email: "ksr@kickstarter.com", + isEmailVerified: true, + isDeliverable: true) } diff --git a/Library/Strings.swift b/Library/Strings.swift index caab9125d4..91900db4eb 100644 --- a/Library/Strings.swift +++ b/Library/Strings.swift @@ -534,6 +534,23 @@ public enum Strings { substitutions: [:] ) } + /** + "Are you sure you wish to remove this card from your payment method options?" + + - **en**: "Are you sure you wish to remove this card from your payment method options?" + - **de**: "Are you sure you wish to remove this card from your payment method options?" + - **es**: "Are you sure you wish to remove this card from your payment method options?" + - **fr**: "Are you sure you wish to remove this card from your payment method options?" + - **ja**: "Are you sure you wish to remove this card from your payment method options?" + */ + public static func Are_you_sure_you_wish_to_remove_this_card() -> String { + return localizedString( + key: "Are_you_sure_you_wish_to_remove_this_card", + defaultValue: "Are you sure you wish to remove this card from your payment method options?", + count: nil, + substitutions: [:] + ) + } /** "Ask me anything" @@ -4079,6 +4096,23 @@ with friends." substitutions: [:] ) } + /** + "New email" + + - **en**: "New email" + - **de**: "New email" + - **es**: "New email" + - **fr**: "New email" + - **ja**: "New email" + */ + public static func New_email() -> String { + return localizedString( + key: "New_email", + defaultValue: "New email", + count: nil, + substitutions: [:] + ) + } /** "New password" @@ -4215,6 +4249,23 @@ with friends." substitutions: [:] ) } + /** + "No, nevermind" + + - **en**: "No, nevermind" + - **de**: "No, nevermind" + - **es**: "No, nevermind" + - **fr**: "No, nevermind" + - **ja**: "No, nevermind" + */ + public static func No_nevermind() -> String { + return localizedString( + key: "No_nevermind", + defaultValue: "No, nevermind", + count: nil, + substitutions: [:] + ) + } /** "No one has posted an update yet." @@ -5547,6 +5598,23 @@ daring ideas." substitutions: ["creator_name": creator_name] ) } + /** + "Remove this card" + + - **en**: "Remove this card" + - **de**: "Remove this card" + - **es**: "Remove this card" + - **fr**: "Remove this card" + - **ja**: "Remove this card" + */ + public static func Remove_this_card() -> String { + return localizedString( + key: "Remove_this_card", + defaultValue: "Remove this card", + count: nil, + substitutions: [:] + ) + } /** "Replay" @@ -7476,6 +7544,23 @@ Veuillez réessayer ultérieurement." substitutions: [:] ) } + /** + "Yes, remove" + + - **en**: "Yes, remove" + - **de**: "Yes, remove" + - **es**: "Yes, remove" + - **fr**: "Yes, remove" + - **ja**: "Yes, remove" + */ + public static func Yes_remove() -> String { + return localizedString( + key: "Yes_remove", + defaultValue: "Yes, remove", + count: nil, + substitutions: [:] + ) + } /** "Yes, turn off" diff --git a/Library/ViewModels/ChangeEmailViewModel.swift b/Library/ViewModels/ChangeEmailViewModel.swift index 2df4ae3962..5abd508c22 100644 --- a/Library/ViewModels/ChangeEmailViewModel.swift +++ b/Library/ViewModels/ChangeEmailViewModel.swift @@ -2,7 +2,6 @@ import KsApi import Prelude import ReactiveSwift import Result -import UIKit public protocol ChangeEmailViewModelInputs { func emailFieldDidEndEditing(email: String?) @@ -27,15 +26,17 @@ public protocol ChangeEmailViewModelOutputs { var didSendVerificationEmail: Signal { get } var dismissKeyboard: Signal { get } var emailText: Signal { get } - var messageBannerViewIsHidden: Signal { get } + var messageLabelViewHidden: Signal { get } var onePasswordButtonIsHidden: Signal { get } var onePasswordFindLoginForURLString: Signal { get } var passwordText: Signal { get } var passwordFieldBecomeFirstResponder: Signal { get } - var resendVerificationStackViewIsHidden: Signal { get } + var resendVerificationEmailViewIsHidden: Signal { get } var resetFields: Signal { get } var saveButtonIsEnabled: Signal { get } var shouldSubmitForm: Signal { get } + var unverifiedEmailLabelHidden: Signal { get } + var warningMessageLabelHidden: Signal { get } var verificationEmailButtonTitle: Signal { get } } @@ -46,7 +47,6 @@ public protocol ChangeEmailViewModelType { public final class ChangeEmailViewModel: ChangeEmailViewModelType, ChangeEmailViewModelInputs, ChangeEmailViewModelOutputs { - public init() { let changeEmailEvent = Signal.merge( @@ -66,7 +66,9 @@ ChangeEmailViewModelOutputs { changeEmailEvent.values().ignoreValues() ) .switchMap { _ in - AppEnvironment.current.apiService.fetchGraphUserEmail(query: UserQueries.email.query) + AppEnvironment.current + .apiService + .fetchGraphUserEmailFields(query: NonEmptySet(Query.user(userEmailQueryFields()))) .ksr_delay(AppEnvironment.current.apiDelayInterval, on: AppEnvironment.current.scheduler) .materialize() } @@ -85,15 +87,31 @@ ChangeEmailViewModelOutputs { self.emailText = userEmailEvent.values().map { $0.me.email } - self.resendVerificationStackViewIsHidden = changeEmailEvent.values().ignoreValues().mapConst(false) + let isEmailVerified = userEmailEvent.values().map { $0.me.isEmailVerified }.skipNil() + let isEmailDeliverable = userEmailEvent.values().map { $0.me.isDeliverable }.skipNil() + + self.resendVerificationEmailViewIsHidden = Signal.combineLatest(isEmailVerified, isEmailDeliverable) + .map { $0 && $1 } + + self.unverifiedEmailLabelHidden = Signal + .combineLatest(isEmailVerified, isEmailDeliverable) + .map { isEmailVerified, isEmailDeliverable -> Bool in + guard isEmailVerified else { return !isEmailDeliverable } + + return true + } + + self.warningMessageLabelHidden = isEmailDeliverable + + self.messageLabelViewHidden = Signal + .merge(self.unverifiedEmailLabelHidden, self.warningMessageLabelHidden) + .filter(isFalse) self.dismissKeyboard = Signal.merge( self.changePasswordProperty.signal.ignoreValues(), self.saveButtonTappedProperty.signal.ignoreValues() ) - self.messageBannerViewIsHidden = viewDidLoadProperty.signal.mapConst(false) - self.saveButtonIsEnabled = Signal.combineLatest ( self.emailText, self.newEmailProperty.signal.skipNil(), @@ -142,7 +160,7 @@ ChangeEmailViewModelOutputs { self.shouldSubmitForm.signal.mapConst(true), self.didChangeEmail.mapConst(false), self.didFailToChangeEmail.mapConst(false) - ).logEvents(identifier: "\n\n EMITE \n\n") + ) } private let newEmailProperty = MutableProperty(nil) @@ -216,16 +234,18 @@ ChangeEmailViewModelOutputs { public let didSendVerificationEmail: Signal public let dismissKeyboard: Signal public let emailText: Signal - public let messageBannerViewIsHidden: Signal + public let messageLabelViewHidden: Signal public let onePasswordButtonIsHidden: Signal public let onePasswordFindLoginForURLString: Signal public let passwordFieldBecomeFirstResponder: Signal public let passwordText: Signal - public let resendVerificationStackViewIsHidden: Signal + public let resendVerificationEmailViewIsHidden: Signal public let resetFields: Signal public let saveButtonIsEnabled: Signal public let shouldSubmitForm: Signal + public let unverifiedEmailLabelHidden: Signal public let verificationEmailButtonTitle: Signal + public let warningMessageLabelHidden: Signal public var inputs: ChangeEmailViewModelInputs { return self diff --git a/Library/ViewModels/ChangeEmailViewModelTests.swift b/Library/ViewModels/ChangeEmailViewModelTests.swift index 3820baa983..4b4b181cde 100644 --- a/Library/ViewModels/ChangeEmailViewModelTests.swift +++ b/Library/ViewModels/ChangeEmailViewModelTests.swift @@ -23,10 +23,12 @@ final class ChangeEmailViewModelTests: TestCase { private let passwordFieldBecomeFirstResponder = TestObserver() private let resetFields = TestObserver() private let shouldSubmitForm = TestObserver() - + private let messageLabelViewHiddenObserver = TestObserver() private let passwordText = TestObserver() - private let resendVerificationStackViewIsHidden = TestObserver() + private let resendVerificationEmailViewIsHiddenObserver = TestObserver() private let saveButtonIsEnabled = TestObserver() + private let unverifiedEmailLabelHiddenObserver = TestObserver() + private let warningMessageLabelHiddenObserver = TestObserver() private let verificationEmailButtonTitle = TestObserver() override func setUp() { @@ -38,12 +40,13 @@ final class ChangeEmailViewModelTests: TestCase { self.vm.outputs.emailText.observe(self.emailText.observer) self.vm.outputs.dismissKeyboard.observe(self.dismissKeyboard.observer) + self.vm.outputs.messageLabelViewHidden.observe(self.messageLabelViewHiddenObserver.observer) self.vm.outputs.onePasswordButtonIsHidden.observe(self.onePasswordButtonHidden.observer) self.vm.outputs.onePasswordFindLoginForURLString.observe(self.onePasswordFindLoginForURLString.observer) self.vm.outputs.passwordFieldBecomeFirstResponder.observe(self.passwordFieldBecomeFirstResponder.observer) self.vm.outputs.passwordText.observe(self.passwordText.observer) - self.vm.outputs.resendVerificationStackViewIsHidden.observe( - self.resendVerificationStackViewIsHidden.observer + self.vm.outputs.resendVerificationEmailViewIsHidden.observe( + self.resendVerificationEmailViewIsHiddenObserver.observer ) self.vm.outputs.didSendVerificationEmail.observe( self.didSendVerificationEmail.observer @@ -54,6 +57,8 @@ final class ChangeEmailViewModelTests: TestCase { self.vm.outputs.resetFields.observe(self.resetFields.observer) self.vm.outputs.saveButtonIsEnabled.observe(self.saveButtonIsEnabled.observer) self.vm.outputs.shouldSubmitForm.observe(self.shouldSubmitForm.observer) + self.vm.outputs.unverifiedEmailLabelHidden.observe(self.unverifiedEmailLabelHiddenObserver.observer) + self.vm.outputs.warningMessageLabelHidden.observe(self.warningMessageLabelHiddenObserver.observer) self.vm.outputs.verificationEmailButtonTitle.observe(self.verificationEmailButtonTitle.observer) } @@ -118,7 +123,7 @@ final class ChangeEmailViewModelTests: TestCase { func testEmailText_AfterFetchingUsersEmail() { - let response = UserEnvelope(me: .template) + let response = UserEnvelope(me: .template) withEnvironment(apiService: MockService(changeEmailResponse: response)) { @@ -140,7 +145,7 @@ final class ChangeEmailViewModelTests: TestCase { func testSaveButtonEnabledStatus() { - let response = UserEnvelope(me: .template) + let response = UserEnvelope(me: .template) withEnvironment(apiService: MockService(changeEmailResponse: response)) { @@ -162,7 +167,7 @@ final class ChangeEmailViewModelTests: TestCase { func testSaveButtonEnablesAfter_OnePasswordPrefillsField() { - let response = UserEnvelope(me: .template) + let response = UserEnvelope(me: .template) withEnvironment(apiService: MockService(changeEmailResponse: response)) { @@ -178,20 +183,103 @@ final class ChangeEmailViewModelTests: TestCase { } } - func testResendVerificationStackViewIsHidden_IfEmailIsVerified() { - self.resendVerificationStackViewIsHidden.assertDidNotEmitValue() + func testResendVerificationViewIsHidden_IfEmailIsVerified() { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.resendVerificationEmailViewIsHiddenObserver + .assertValues([true], "Email is deliverable and verified") } - func testResendVerificationStackViewIsNotHidden_IfEmailIsNotVerified() { - self.resendVerificationStackViewIsHidden.assertDidNotEmitValue() + func testResendVerificationViewIsNotHidden_IfEmailIsNotVerified() { + let userEmailFields = UserEmailFields.template + |> \.isEmailVerified .~ false + + let mockService = MockService(changeEmailResponse: UserEnvelope(me: userEmailFields)) + + withEnvironment(apiService: mockService) { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.resendVerificationEmailViewIsHiddenObserver.assertValues([false], "Email is unverified") + } } - func testResendVerificationStackViewAppears_AfterChangingEmail() { + func testResendVerificationViewIsNotHidden_IfEmailIsUndeliverable() { + let userEmailFields = UserEmailFields.template + |> \.isDeliverable .~ false + + let mockService = MockService(changeEmailResponse: UserEnvelope(me: userEmailFields)) + + withEnvironment(apiService: mockService) { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.resendVerificationEmailViewIsHiddenObserver + .assertValues([false], "Email is undeliverable") + } + } + + func testWarningMessageLabel_isHidden() { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.warningMessageLabelHiddenObserver.assertValues([true], "Email is deliverable") + } + + func testWarningMessageLabel_isNotHidden_whenEmailIsNotDeliverable() { + let userEmailFields = UserEmailFields.template + |> \.isDeliverable .~ false + + withEnvironment(apiService: MockService(changeEmailResponse: UserEnvelope(me: userEmailFields))) { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.warningMessageLabelHiddenObserver + .assertValues([false], "Email is not deliverable") + } + } + + func testUnverifiedEmailLabel_isHidden_whenEmailIsVerified() { + self.vm.inputs.viewDidLoad() - self.vm.inputs.submitForm(newEmail: "ksr@kickstarter.com", password: "123456") self.scheduler.advance() - self.resendVerificationStackViewIsHidden.assertValues([false]) + self.unverifiedEmailLabelHiddenObserver.assertValues([true], "Email is verified & deliverable") + } + + func testUnverifiedEmailLabel_isNotHidden_whenEmailIsUnverified() { + let userEmailFields = UserEmailFields.template + |> \.isEmailVerified .~ false + + withEnvironment(apiService: MockService(changeEmailResponse: UserEnvelope(me: userEmailFields))) { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.unverifiedEmailLabelHiddenObserver + .assertValues([false], "Email is not verified, but deliverable") + } + } + + func testUnverifiedEmailLabel_isHidden_whenEmailIsUnverifiedAndUndeliverable() { + let userEmailFields = UserEmailFields.template + |> \.isDeliverable .~ false + |> \.isEmailVerified .~ false + + withEnvironment(apiService: MockService(changeEmailResponse: UserEnvelope(me: userEmailFields))) { + self.vm.inputs.viewDidLoad() + + self.scheduler.advance() + + self.unverifiedEmailLabelHiddenObserver + .assertValues([true], "Email is not verified, but deliverable message takes precendent") + } } func testDidFailToSendVerificationEmailEmits_OnFailure() { @@ -208,7 +296,6 @@ final class ChangeEmailViewModelTests: TestCase { } func testDidSendVerificationEmailEmits_OnSuccess() { - self.vm.inputs.resendVerificationEmailButtonTapped() self.scheduler.advance() @@ -216,7 +303,6 @@ final class ChangeEmailViewModelTests: TestCase { } func testVerificationEmailButtonTitle_Backer() { - let user = User.template |> \.stats.createdProjectsCount .~ 0 @@ -265,18 +351,13 @@ final class ChangeEmailViewModelTests: TestCase { } func testFieldsResetWithEmptyString_AfterChangingEmail() { + self.vm.inputs.submitForm(newEmail: "ksr@kickstarter.com", password: "123456") + self.scheduler.advance() - withEnvironment(apiService: MockService()) { - - self.vm.inputs.submitForm(newEmail: "ksr@kickstarter.com", password: "123456") - self.scheduler.advance() - - self.resetFields.assertValue("") - } + self.resetFields.assertValue("") } func testShouldSubmitFormEmits_WhenTappingSaveOrGo() { - self.vm.inputs.viewDidLoad() self.shouldSubmitForm.assertValueCount(0) diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_pad@2x.png index f5fe9f6bfe..5a4b62f555 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4_7inch@2x.png index 339f848375..fbcda498d6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4inch@2x.png index 782cf5eeeb..2fd1eb31b4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_5inch@2x.png index b9ef0fa52b..cc995097ac 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_8inch@2x.png index 0414e49b4c..6e1996de93 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_pad@2x.png index 69d61bfaa8..7f4012ac7d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4_7inch@2x.png index bf706550f9..ad70105aea 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4inch@2x.png index 447b5867a3..b7f11c736a 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_5inch@2x.png index f19fa07bf6..9f4e551ac5 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_8inch@2x.png index 2003199168..83623463e1 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_pad@2x.png index 0a6ecd6942..6d84491d8c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4_7inch@2x.png index 1a8f377e6f..2033981bfc 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4inch@2x.png index 3127e4a1e8..956367c727 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_5inch@2x.png index c728638922..e476d9f25c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_8inch@2x.png index 4062461ce3..932097a754 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_pad@2x.png index 5274ae4a2f..7f8779673c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4_7inch@2x.png index e52c278ddd..889e0c01cd 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4inch@2x.png index 2af48b8522..59c02f52ae 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_5inch@2x.png index 42588fca49..ccafc6fcdd 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_8inch@2x.png index f647f6a301..7c845d6cda 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_pad@2x.png index 338b21571b..7f781fdf70 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4_7inch@2x.png index 3db1cfcbf9..6dc9340118 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4inch@2x.png index e66d166a93..d86a75ebe7 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_5inch@2x.png index 862a7652c4..baff7ad53e 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_8inch@2x.png index 7958550d99..b47210ea50 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.AddNewCardViewControllerTests/testAddNewCard_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_pad@2x.png new file mode 100644 index 0000000000..765a4c31e0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..8b5893863c Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4inch@2x.png new file mode 100644 index 0000000000..01df722413 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..16e772555f Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..9fdbe2f564 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_pad@2x.png new file mode 100644 index 0000000000..6664c56f3d Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..ea9fa4da2b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4inch@2x.png new file mode 100644 index 0000000000..c14b039276 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..6781a82ecb Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..c789fe42dc Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_pad@2x.png new file mode 100644 index 0000000000..0b7b532bf4 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..33ee7a74bc Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4inch@2x.png new file mode 100644 index 0000000000..094d48231d Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..90854363e1 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..bcea466c07 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_pad@2x.png new file mode 100644 index 0000000000..664bcdc2a2 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..3117fbd59b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4inch@2x.png new file mode 100644 index 0000000000..3f85a6a796 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..39b6adcf91 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..9d6981ab36 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_pad@2x.png new file mode 100644 index 0000000000..01e5f80dbb Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..6854224684 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4inch@2x.png new file mode 100644 index 0000000000..bb6c38b60f Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..215222d47e Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..d6d8854a38 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_undeliverableEmail_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_pad@2x.png new file mode 100644 index 0000000000..5e2c6fc922 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..9f203eab39 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4inch@2x.png new file mode 100644 index 0000000000..a9efe4c72b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..7f779b0981 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..5816cc9728 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_pad@2x.png new file mode 100644 index 0000000000..78e2a602c0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..74f2a818e5 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4inch@2x.png new file mode 100644 index 0000000000..1ec59b1c64 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..b3bd00054c Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..214711f7e6 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_pad@2x.png new file mode 100644 index 0000000000..3bda5b9ef0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..c9e70345b4 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4inch@2x.png new file mode 100644 index 0000000000..1304b2a794 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..2a7a173e55 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..6f5caa7de5 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_pad@2x.png new file mode 100644 index 0000000000..ab95080ce5 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..2b84a86e09 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4inch@2x.png new file mode 100644 index 0000000000..0833547fb8 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..7b2ba92ffb Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..ee33045fb1 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_pad@2x.png new file mode 100644 index 0000000000..c504623bac Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..406dff822d Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4inch@2x.png new file mode 100644 index 0000000000..6437467516 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..355d61e877 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..9f00161ba1 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_isCreator_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_pad@2x.png new file mode 100644 index 0000000000..ecb3ae78ad Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..3d56c6bc9b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4inch@2x.png new file mode 100644 index 0000000000..aee9c3691d Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..1e0d93c515 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..bb791f637c Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_pad@2x.png new file mode 100644 index 0000000000..223eb4741f Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..cf07db0604 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4inch@2x.png new file mode 100644 index 0000000000..cdfdcae092 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..3841919cd3 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..9be7752b99 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_pad@2x.png new file mode 100644 index 0000000000..e5055956ca Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..8e7c0b5da0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4inch@2x.png new file mode 100644 index 0000000000..a2df5dce35 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..92ac0338b1 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..b8f60ba760 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_pad@2x.png new file mode 100644 index 0000000000..e2798a0d7b Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..51dababff2 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4inch@2x.png new file mode 100644 index 0000000000..24ff97f50e Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..a404dfbc4c Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..9395614348 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_pad@2x.png new file mode 100644 index 0000000000..24508b8bbe Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4_7inch@2x.png new file mode 100644 index 0000000000..4ed5221c31 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4inch@2x.png new file mode 100644 index 0000000000..d6cd199c9a Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_5inch@2x.png new file mode 100644 index 0000000000..dbb900e4a0 Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_8inch@2x.png new file mode 100644 index 0000000000..25282a4f9e Binary files /dev/null and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmailScreen_unverifiedEmail_lang_ja_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_pad@2x.png index e843430d6f..6a3f6c2fb4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4_7inch@2x.png index 7af2d935d8..4f74d71703 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4inch@2x.png index cc5b101aee..cb3b81fe67 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_5inch@2x.png index cd9014f3b9..158094a75e 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_8inch@2x.png index 10393d692c..25fcba0587 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_de_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_pad@2x.png index 564f952b79..769c795104 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4_7inch@2x.png index 3caf1af901..cd998fbf51 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4inch@2x.png index dfc1ca7611..59a7419b5c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_5inch@2x.png index 7f759f89cb..d5c7421343 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_8inch@2x.png index 361568fb7a..ae2f624a4d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_en_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_pad@2x.png index 4c71e3bd09..ab74097ac6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4_7inch@2x.png index 2b3d59faaf..93e0df880f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4inch@2x.png index a0b0ef54e9..39bd0fa48d 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_5inch@2x.png index 81199a3437..babdbc4c01 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_8inch@2x.png index 325904a2ea..0d95a12ef4 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_es_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_pad@2x.png index 80d61edc12..2b7664637f 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4_7inch@2x.png index ba46585b47..a7b3fccf5c 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4inch@2x.png index 2919f3d17e..90152da7a1 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_5inch@2x.png index 57c6718474..3684fdbdd9 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_8inch@2x.png index d080469dc6..14c6c5ecc6 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_fr_device_phone5_8inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_pad@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_pad@2x.png index a5fdc5c055..40cb17b136 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_pad@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_pad@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4_7inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4_7inch@2x.png index df43e19d1b..4986998ddf 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4_7inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4_7inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4inch@2x.png index a2964d6d49..f58f8091d3 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone4inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_5inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_5inch@2x.png index 840f198ea6..f59df1e57b 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_5inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_5inch@2x.png differ diff --git a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_8inch@2x.png b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_8inch@2x.png index 692937d9f1..7c59918342 100644 Binary files a/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_8inch@2x.png and b/Screenshots/_64/Kickstarter_Framework_iOSTests.ChangeEmailViewControllerTests/testChangeEmail_lang_ja_device_phone5_8inch@2x.png differ