/sample/src/androidTest/java/convalida/sample/robot/ConvalidaRobot.java

https://github.com/WellingtonCosta/convalida · Java · 418 lines · 308 code · 110 blank · 0 comment · 0 complexity · fed9891ee588cb3ecb88431d4620c457 MD5 · raw file

  1. package convalida.sample.robot;
  2. import androidx.annotation.IdRes;
  3. import androidx.annotation.StringRes;
  4. import androidx.test.espresso.action.ViewActions;
  5. import convalida.sample.R;
  6. import static androidx.test.espresso.Espresso.onView;
  7. import static androidx.test.espresso.action.ViewActions.clearText;
  8. import static androidx.test.espresso.action.ViewActions.click;
  9. import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
  10. import static androidx.test.espresso.action.ViewActions.scrollTo;
  11. import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
  12. import static androidx.test.espresso.assertion.ViewAssertions.matches;
  13. import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
  14. import static androidx.test.espresso.matcher.ViewMatchers.withId;
  15. import static androidx.test.espresso.matcher.ViewMatchers.withText;
  16. import static org.hamcrest.CoreMatchers.anyOf;
  17. public class ConvalidaRobot {
  18. public TypeText name() {
  19. onView(withId(R.id.name_field))
  20. .perform(scrollTo(), clearText());
  21. return new TypeText(this, R.id.name_field);
  22. }
  23. public TypeText nickName() {
  24. onView(withId(R.id.nickname_field))
  25. .perform(scrollTo(), clearText());
  26. return new TypeText(this, R.id.nickname_field);
  27. }
  28. public TypeText age() {
  29. onView(withId(R.id.age_field))
  30. .perform(scrollTo(), clearText());
  31. return new TypeText(this, R.id.age_field);
  32. }
  33. public TypeText phone() {
  34. onView(withId(R.id.phone_field))
  35. .perform(scrollTo(), clearText());
  36. return new TypeText(this, R.id.phone_field);
  37. }
  38. public TypeText cpf() {
  39. onView(withId(R.id.cpf_field))
  40. .perform(scrollTo(), clearText());
  41. return new TypeText(this, R.id.cpf_field);
  42. }
  43. public TypeText cnpj() {
  44. onView(withId(R.id.cnpj_field))
  45. .perform(scrollTo(), clearText());
  46. return new TypeText(this, R.id.cnpj_field);
  47. }
  48. public TypeText isbn() {
  49. onView(withId(R.id.isbn_field))
  50. .perform(scrollTo(), clearText());
  51. return new TypeText(this, R.id.isbn_field);
  52. }
  53. public TypeText email() {
  54. onView(withId(R.id.email_field))
  55. .perform(scrollTo(), clearText());
  56. return new TypeText(this, R.id.email_field);
  57. }
  58. public TypeText confirmEmail() {
  59. onView(withId(R.id.confirm_email_field))
  60. .perform(scrollTo(), clearText());
  61. return new TypeText(this, R.id.confirm_email_field);
  62. }
  63. public TypeText password() {
  64. onView(withId(R.id.password_field))
  65. .perform(scrollTo(), clearText());
  66. return new TypeText(this, R.id.password_field);
  67. }
  68. public TypeText confirmPassword() {
  69. onView(withId(R.id.confirm_password_field))
  70. .perform(scrollTo(), clearText());
  71. return new TypeText(this, R.id.confirm_password_field);
  72. }
  73. public TypeText creditCard() {
  74. onView(withId(R.id.credit_card_field))
  75. .perform(scrollTo(), clearText());
  76. return new TypeText(this, R.id.credit_card_field);
  77. }
  78. public TypeText numericLimit() {
  79. onView(withId(R.id.numeric_limit_field))
  80. .perform(scrollTo(), clearText());
  81. return new TypeText(this, R.id.numeric_limit_field);
  82. }
  83. public TypeText ipv4() {
  84. onView(withId(R.id.ipv4_field))
  85. .perform(scrollTo(), clearText());
  86. return new TypeText(this, R.id.ipv4_field);
  87. }
  88. public TypeText ipv6() {
  89. onView(withId(R.id.ipv6_field))
  90. .perform(scrollTo(), clearText());
  91. return new TypeText(this, R.id.ipv6_field);
  92. }
  93. public TypeText url() {
  94. onView(withId(R.id.url_field))
  95. .perform(scrollTo(), clearText());
  96. return new TypeText(this, R.id.url_field);
  97. }
  98. public TypeText date() {
  99. onView(withId(R.id.date_field))
  100. .perform(scrollTo(), clearText());
  101. return new TypeText(this, R.id.date_field);
  102. }
  103. public ConvalidaRobot validate() {
  104. onView(withId(R.id.validate_button))
  105. .perform(closeSoftKeyboard())
  106. .perform(scrollTo(), click());
  107. return this;
  108. }
  109. public ConvalidaRobot clear() {
  110. onView(withId(R.id.clear_button))
  111. .perform(closeSoftKeyboard())
  112. .perform(scrollTo(), click());
  113. return this;
  114. }
  115. public Result result () {
  116. return new Result();
  117. }
  118. public static class TypeText {
  119. private final ConvalidaRobot _robot;
  120. private final @IdRes int _fieldResId;
  121. private TypeText(ConvalidaRobot robot, @IdRes int fieldResId) {
  122. _robot = robot;
  123. _fieldResId = fieldResId;
  124. }
  125. public ConvalidaRobot typeText(String text) {
  126. onView(withId(_fieldResId))
  127. .perform(ViewActions.typeText(text))
  128. .perform(closeSoftKeyboard());
  129. return _robot;
  130. }
  131. }
  132. public static class Result {
  133. public void nameIsInvalid() {
  134. isInvalid(R.id.name_field, R.string.field_required);
  135. }
  136. public void nameIsValid() {
  137. isValid(R.id.name_field, R.string.field_required);
  138. }
  139. public void nickNameIsInvalid() {
  140. isInvalid(R.id.nickname_field, R.string.min_3_characters);
  141. }
  142. public void nickNameIsValid() {
  143. isValid(R.id.nickname_field, R.string.min_3_characters);
  144. }
  145. public void ageIsInvalid() {
  146. isInvalid(R.id.age_field, R.string.only_numbers);
  147. }
  148. public void ageIsValid() {
  149. isValid(R.id.age_field, R.string.only_numbers);
  150. }
  151. public void phoneIsInvalid() {
  152. isInvalid(R.id.phone_field, R.string.invalid_phone);
  153. }
  154. public void phoneIsValid() {
  155. isValid(R.id.phone_field, R.string.invalid_phone);
  156. }
  157. public void cpfIsInvalid() {
  158. isInvalid(R.id.cpf_field, R.string.invalid_cpf);
  159. }
  160. public void cpfIsValid() {
  161. isValid(R.id.cpf_field, R.string.invalid_cpf);
  162. }
  163. public void cnpjIsInvalid() {
  164. isInvalid(R.id.cnpj_field, R.string.invalid_cnpj);
  165. }
  166. public void cnpjIsValid() {
  167. isValid(R.id.cnpj_field, R.string.invalid_cnpj);
  168. }
  169. public void isbnIsInvalid() {
  170. isInvalid(R.id.isbn_field, R.string.invalid_isbn);
  171. }
  172. public void isbnIsValid() {
  173. isValid(R.id.isbn_field, R.string.invalid_isbn);
  174. }
  175. public void emailIsInvalid() {
  176. isInvalid(R.id.email_field, R.string.invalid_email);
  177. }
  178. public void emailIsValid() {
  179. isValid(R.id.email_field, R.string.invalid_email);
  180. }
  181. public void confirmEmailIsInvalid() {
  182. isInvalid(R.id.confirm_email_field, R.string.emails_not_match);
  183. }
  184. public void confirmEmailIsValid() {
  185. isValid(R.id.confirm_email_field, R.string.emails_not_match);
  186. }
  187. public void passwordIsInvalid() {
  188. isInvalid(R.id.password_field, R.string.invalid_password);
  189. }
  190. public void passwordIsValid() {
  191. isValid(R.id.password_field, R.string.invalid_password);
  192. }
  193. public void confirmPasswordIsInvalid() {
  194. isInvalid(R.id.confirm_password_field, R.string.passwords_not_match);
  195. }
  196. public void confirmPasswordIsValid() {
  197. isValid(R.id.confirm_password_field, R.string.passwords_not_match);
  198. }
  199. public void creditCardIsInvalid() {
  200. isInvalid(R.id.credit_card_field, R.string.invalid_credit_card);
  201. }
  202. public void creditCardIsValid() {
  203. isValid(R.id.credit_card_field, R.string.invalid_credit_card);
  204. }
  205. public void numericLimitIsInvalid() {
  206. isInvalid(R.id.numeric_limit_field, R.string.invalid_numeric_limit);
  207. }
  208. public void numericLimitIsValid() {
  209. isValid(R.id.numeric_limit_field, R.string.invalid_numeric_limit);
  210. }
  211. public void ipv4IsValid() {
  212. isValid(R.id.ipv4_field, R.string.invalid_ipv4);
  213. }
  214. public void ipv4IsInvalid() {
  215. isInvalid(R.id.ipv4_field, R.string.invalid_ipv4);
  216. }
  217. public void ipv6IsValid() {
  218. isValid(R.id.ipv6_field, R.string.invalid_ipv6);
  219. }
  220. public void ipv6IsInvalid() {
  221. isInvalid(R.id.ipv6_field, R.string.invalid_ipv6);
  222. }
  223. public void urlIsValid() {
  224. isValid(R.id.url_field, R.string.invalid_url);
  225. }
  226. public void urlIsInvalid() {
  227. isInvalid(R.id.url_field, R.string.invalid_url);
  228. }
  229. public void dateIsValid() {
  230. onView(anyOf(
  231. withText(R.string.invalid_past_date),
  232. withText(R.string.invalid_future_date)
  233. )).check(doesNotExist());
  234. }
  235. public void dateIsInvalid() {
  236. onView(anyOf(
  237. withText(R.string.invalid_past_date),
  238. withText(R.string.invalid_future_date)
  239. )).check(matches(isDisplayed()));
  240. }
  241. private void isInvalid(
  242. @IdRes int fieldResId,
  243. @StringRes int errorMessageResId
  244. ) {
  245. onView(withId(fieldResId))
  246. .perform(scrollTo());
  247. onView(withText(errorMessageResId))
  248. .check(matches(isDisplayed()));
  249. }
  250. private void isValid(
  251. @IdRes int fieldResId,
  252. @StringRes int errorMessageResId
  253. ) {
  254. onView(withId(fieldResId))
  255. .perform(scrollTo());
  256. onView(withText(errorMessageResId))
  257. .check(doesNotExist());
  258. }
  259. public void isAllValid() {
  260. onView(withText(R.string.field_required))
  261. .check(doesNotExist());
  262. onView(withText(R.string.min_3_characters))
  263. .check(doesNotExist());
  264. onView(withText(R.string.only_numbers))
  265. .check(doesNotExist());
  266. onView(withText(R.string.invalid_phone))
  267. .check(doesNotExist());
  268. onView(withText(R.string.invalid_cpf))
  269. .check(doesNotExist());
  270. onView(withText(R.string.start_value_not_valid))
  271. .check(doesNotExist());
  272. onView(withText(R.string.limit_value_not_valid))
  273. .check(doesNotExist());
  274. onView(withText(R.string.invalid_email))
  275. .check(doesNotExist());
  276. onView(withText(R.string.emails_not_match))
  277. .check(doesNotExist());
  278. onView(withText(R.string.invalid_password))
  279. .check(doesNotExist());
  280. onView(withText(R.string.passwords_not_match))
  281. .check(doesNotExist());
  282. onView(withText(R.string.invalid_credit_card))
  283. .check(doesNotExist());
  284. onView(withText(R.string.invalid_numeric_limit))
  285. .check(doesNotExist());
  286. }
  287. public void isAllInvalid() {
  288. onView(withText(R.string.field_required))
  289. .perform(scrollTo())
  290. .check(matches(isDisplayed()));
  291. onView(withText(R.string.min_3_characters))
  292. .perform(scrollTo())
  293. .check(matches(isDisplayed()));
  294. onView(withText(R.string.only_numbers))
  295. .perform(scrollTo())
  296. .check(matches(isDisplayed()));
  297. onView(withText(R.string.invalid_phone))
  298. .perform(scrollTo())
  299. .check(matches(isDisplayed()));
  300. onView(withText(R.string.invalid_email))
  301. .perform(scrollTo())
  302. .check(matches(isDisplayed()));
  303. onView(withText(R.string.invalid_password))
  304. .perform(scrollTo())
  305. .check(matches(isDisplayed()));
  306. }
  307. }
  308. }