date_repeat_form.test 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <?php
  2. /**
  3. * @file
  4. * Test Date Repeat form.
  5. */
  6. class DateRepeatFormTestCase extends DrupalWebTestCase {
  7. protected $privileged_user;
  8. public static function getInfo() {
  9. return array(
  10. 'name' => t('Date Repeat Form'),
  11. 'description' => t('Test Date Repeat form.') ,
  12. 'group' => t('Date'),
  13. );
  14. }
  15. /**
  16. * Implements setUp().
  17. */
  18. public function setUp() {
  19. // Load the date_repeat module.
  20. parent::setUp('field', 'field_ui', 'date_api', 'date_repeat', 'date', 'date_popup', 'date_repeat_field');
  21. // Create and log in our privileged user.
  22. $this->privileged_user = $this->drupalCreateUser(array(
  23. 'administer content types', 'administer nodes', 'bypass node access', 'view date repeats', 'administer fields'
  24. ));
  25. $this->drupalLogin($this->privileged_user);
  26. variable_set('date_format_short', 'Y-m-d H:i');
  27. }
  28. public function testDateRepeatForm() {
  29. $edit = array();
  30. $edit['name'] = 'Date';
  31. $edit['type'] = 'date';
  32. $this->drupalPost('admin/structure/types/add', $edit, t('Save content type'));
  33. $this->assertText('The content type Date has been added.', 'Content type added.');
  34. $display_all_day = FALSE;
  35. // Testing options.
  36. $widget_options = array(
  37. 'date_select' => 'select',
  38. 'date_text' => 'text',
  39. 'date_popup' => 'popup');
  40. foreach ($widget_options as $widget => $options) {
  41. // Daily tests
  42. // Creates date field stored as a datetime.
  43. $this->createDateField($type = 'datetime', $widget, $display_all_day);
  44. $form_edit = $this->dateForm($options, 'daily_1');
  45. $this->verifyDateForm($form_edit);
  46. $form_edit = $this->dateForm($options, 'daily_2');
  47. $this->verifyDateForm($form_edit);
  48. $form_edit = $this->dateForm($options, 'daily_3');
  49. $this->verifyDateForm($form_edit);
  50. $form_edit = $this->dateForm($options, 'daily_4');
  51. $this->verifyDateForm($form_edit);
  52. $form_edit = $this->dateForm($options, 'daily_1', TRUE);
  53. $this->verifyDateForm($form_edit);
  54. $form_edit = $this->dateForm($options, 'daily_2', TRUE);
  55. $this->verifyDateForm($form_edit);
  56. $form_edit = $this->dateForm($options, 'daily_3', TRUE);
  57. $this->verifyDateForm($form_edit);
  58. $form_edit = $this->dateForm($options, 'daily_4', TRUE);
  59. $this->verifyDateForm($form_edit);
  60. $form_edit = $this->dateForm($options, 'daily_1', FALSE, 'exclude');
  61. $this->verifyDateForm($form_edit);
  62. $form_edit = $this->dateForm($options, 'daily_1', FALSE, 'include');
  63. $this->verifyDateForm($form_edit);
  64. $form_edit = $this->dateForm($options, 'daily_1', FALSE, 'exclude_include');
  65. $this->verifyDateForm($form_edit);
  66. // Weekly tests
  67. $form_edit = $this->dateForm($options, 'weekly_1');
  68. $this->verifyDateForm($form_edit);
  69. $form_edit = $this->dateForm($options, 'weekly_2');
  70. $this->verifyDateForm($form_edit);
  71. $form_edit = $this->dateForm($options, 'weekly_3');
  72. $this->verifyDateForm($form_edit);
  73. $form_edit = $this->dateForm($options, 'weekly_4');
  74. $this->verifyDateForm($form_edit);
  75. $form_edit = $this->dateForm($options, 'weekly_1', TRUE);
  76. $this->verifyDateForm($form_edit);
  77. $form_edit = $this->dateForm($options, 'weekly_2', TRUE);
  78. $this->verifyDateForm($form_edit);
  79. $form_edit = $this->dateForm($options, 'weekly_3', TRUE);
  80. $this->verifyDateForm($form_edit);
  81. $form_edit = $this->dateForm($options, 'weekly_4', TRUE);
  82. $this->verifyDateForm($form_edit);
  83. // Monthly tests
  84. $form_edit = $this->dateForm($options, 'monthly_1');
  85. $this->verifyDateForm($form_edit);
  86. $form_edit = $this->dateForm($options, 'monthly_2');
  87. $this->verifyDateForm($form_edit);
  88. $form_edit = $this->dateForm($options, 'monthly_3');
  89. $this->verifyDateForm($form_edit);
  90. $form_edit = $this->dateForm($options, 'monthly_4');
  91. $this->verifyDateForm($form_edit);
  92. $form_edit = $this->dateForm($options, 'monthly_5');
  93. $this->verifyDateForm($form_edit);
  94. $form_edit = $this->dateForm($options, 'monthly_6');
  95. $this->verifyDateForm($form_edit);
  96. $form_edit = $this->dateForm($options, 'monthly_1', TRUE);
  97. $this->verifyDateForm($form_edit);
  98. $form_edit = $this->dateForm($options, 'monthly_2', TRUE);
  99. $this->verifyDateForm($form_edit);
  100. $form_edit = $this->dateForm($options, 'monthly_3', TRUE);
  101. $this->verifyDateForm($form_edit);
  102. $form_edit = $this->dateForm($options, 'monthly_4', TRUE);
  103. $this->verifyDateForm($form_edit);
  104. $form_edit = $this->dateForm($options, 'monthly_5', TRUE);
  105. $this->verifyDateForm($form_edit);
  106. $form_edit = $this->dateForm($options, 'monthly_6', TRUE);
  107. $this->verifyDateForm($form_edit);
  108. // Yearly tests
  109. $form_edit = $this->dateForm($options, 'yearly_1');
  110. $this->verifyDateForm($form_edit);
  111. $form_edit = $this->dateForm($options, 'yearly_2');
  112. $this->verifyDateForm($form_edit);
  113. $form_edit = $this->dateForm($options, 'yearly_3');
  114. $this->verifyDateForm($form_edit);
  115. $form_edit = $this->dateForm($options, 'yearly_4');
  116. $this->verifyDateForm($form_edit);
  117. $form_edit = $this->dateForm($options, 'yearly_5');
  118. $this->verifyDateForm($form_edit);
  119. $form_edit = $this->dateForm($options, 'yearly_6');
  120. $this->verifyDateForm($form_edit);
  121. $form_edit = $this->dateForm($options, 'yearly_1', TRUE);
  122. $this->verifyDateForm($form_edit);
  123. $form_edit = $this->dateForm($options, 'yearly_2', TRUE);
  124. $this->verifyDateForm($form_edit);
  125. $form_edit = $this->dateForm($options, 'yearly_3', TRUE);
  126. $this->verifyDateForm($form_edit);
  127. $form_edit = $this->dateForm($options, 'yearly_4', TRUE);
  128. $this->verifyDateForm($form_edit);
  129. $form_edit = $this->dateForm($options, 'yearly_5', TRUE);
  130. $this->verifyDateForm($form_edit);
  131. $form_edit = $this->dateForm($options, 'yearly_6', TRUE);
  132. $this->verifyDateForm($form_edit);
  133. $this->deleteDateField();
  134. }
  135. }
  136. function dateForm($options, $test_id = NULL, $is_count = FALSE, $exclude_include = NULL) {
  137. // Tests that date field functions properly.
  138. $edit = array();
  139. $edit['title'] = $this->randomName(8);
  140. $edit['body[und][0][value]'] = $this->randomName(16);
  141. $current_year = date('Y');
  142. switch ($options) {
  143. case 'select':
  144. $edit['field_test[und][0][value][year]'] = $current_year;
  145. $edit['field_test[und][0][value][month]'] = '10';
  146. $edit['field_test[und][0][value][day]'] = '7';
  147. $edit['field_test[und][0][value][hour]'] = '10';
  148. $edit['field_test[und][0][value][minute]'] = '30';
  149. break;
  150. case 'text':
  151. $edit['field_test[und][0][value][date]'] = format_string('!year-10-07 10:30', array('!year' => $current_year));
  152. break;
  153. case 'popup':
  154. $edit['field_test[und][0][value][date]'] = format_string('!year-10-07', array('!year' => $current_year));
  155. $edit['field_test[und][0][value][time]'] = '10:30';
  156. break;
  157. }
  158. // Tests that Date repeat settings function properly
  159. if ($test_id !== NULL) {
  160. $edit['field_test[und][0][show_repeat_settings]'] = TRUE;
  161. $count = 5;
  162. switch ($test_id) {
  163. // Daily test cases
  164. case 'daily_1':
  165. $edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
  166. $edit['field_test[und][0][rrule][daily][byday_radios]'] = 'INTERVAL';
  167. $edit['field_test[und][0][rrule][daily][INTERVAL_child]'] = 2;
  168. break;
  169. case 'daily_2':
  170. $edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
  171. $edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_weekday';
  172. break;
  173. case 'daily_3':
  174. $edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
  175. $edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_mo_we_fr';
  176. break;
  177. case 'daily_4':
  178. $edit['field_test[und][0][rrule][FREQ]'] = 'DAILY';
  179. $edit['field_test[und][0][rrule][daily][byday_radios]'] = 'every_tu_th';
  180. break;
  181. // Weekly test cases
  182. case 'weekly_1':
  183. $edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
  184. $edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
  185. $edit['field_test[und][0][rrule][weekly][BYDAY][WE]'] = TRUE;
  186. $edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
  187. break;
  188. case 'weekly_2':
  189. $edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
  190. $edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 1;
  191. $edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
  192. $edit['field_test[und][0][rrule][weekly][BYDAY][FR]'] = TRUE;
  193. break;
  194. case 'weekly_3':
  195. $edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
  196. $edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 2;
  197. $edit['field_test[und][0][rrule][weekly][BYDAY][TU]'] = TRUE;
  198. $edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
  199. break;
  200. case 'weekly_4':
  201. $edit['field_test[und][0][rrule][FREQ]'] = 'WEEKLY';
  202. $edit['field_test[und][0][rrule][weekly][INTERVAL]'] = 10;
  203. $edit['field_test[und][0][rrule][weekly][BYDAY][MO]'] = TRUE;
  204. $edit['field_test[und][0][rrule][weekly][BYDAY][TU]'] = TRUE;
  205. $edit['field_test[und][0][rrule][weekly][BYDAY][WE]'] = TRUE;
  206. $edit['field_test[und][0][rrule][weekly][BYDAY][TH]'] = TRUE;
  207. $edit['field_test[und][0][rrule][weekly][BYDAY][FR]'] = TRUE;
  208. break;
  209. // Monthly test cases
  210. case 'monthly_1':
  211. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  212. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
  213. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
  214. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'FR';
  215. break;
  216. case 'monthly_2':
  217. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  218. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
  219. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
  220. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'SU';
  221. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
  222. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
  223. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][5]'] = TRUE;
  224. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][7]'] = TRUE;
  225. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][9]'] = TRUE;
  226. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][11]'] = TRUE;
  227. break;
  228. case 'monthly_3':
  229. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  230. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYDAY_BYMONTH';
  231. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '-2';
  232. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'MO';
  233. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
  234. $edit['field_test[und][0][rrule][monthly][BYDAY_BYMONTH_child][BYMONTH][12]'] = TRUE;
  235. break;
  236. case 'monthly_4':
  237. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  238. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  239. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
  240. break;
  241. case 'monthly_5':
  242. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  243. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  244. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
  245. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
  246. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
  247. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
  248. break;
  249. case 'monthly_6':
  250. $edit['field_test[und][0][rrule][FREQ]'] = 'MONTHLY';
  251. $edit['field_test[und][0][rrule][monthly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  252. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '-5';
  253. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
  254. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][4]'] = TRUE;
  255. $edit['field_test[und][0][rrule][monthly][BYMONTHDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
  256. break;
  257. // Yearly test cases
  258. case 'yearly_1':
  259. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  260. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
  261. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
  262. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'FR';
  263. break;
  264. case 'yearly_2':
  265. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  266. $edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 2;
  267. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
  268. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '+1';
  269. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'SU';
  270. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
  271. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
  272. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][5]'] = TRUE;
  273. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][7]'] = TRUE;
  274. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][9]'] = TRUE;
  275. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][11]'] = TRUE;
  276. break;
  277. case 'yearly_3':
  278. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  279. $edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 3;
  280. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYDAY_BYMONTH';
  281. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_COUNT]'] = '-2';
  282. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYDAY_DAY]'] = 'MO';
  283. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
  284. $edit['field_test[und][0][rrule][yearly][BYDAY_BYMONTH_child][BYMONTH][12]'] = TRUE;
  285. break;
  286. case 'yearly_4':
  287. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  288. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  289. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
  290. break;
  291. case 'yearly_5':
  292. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  293. $edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 2;
  294. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  295. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '10';
  296. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][1]'] = TRUE;
  297. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
  298. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][3]'] = TRUE;
  299. break;
  300. case 'yearly_6':
  301. $edit['field_test[und][0][rrule][FREQ]'] = 'YEARLY';
  302. $edit['field_test[und][0][rrule][yearly][INTERVAL]'] = 3;
  303. $edit['field_test[und][0][rrule][yearly][day_month]'] = 'BYMONTHDAY_BYMONTH';
  304. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTHDAY]'] = '-5';
  305. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][2]'] = TRUE;
  306. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][4]'] = TRUE;
  307. $edit['field_test[und][0][rrule][yearly][BYMONTHDAY_BYMONTH_child][BYMONTH][6]'] = TRUE;
  308. break;
  309. }
  310. // Test COUNT or UNTIL (default)
  311. if ($is_count) {
  312. $edit['field_test[und][0][rrule][range_of_repeat]'] = 'COUNT';
  313. $edit['field_test[und][0][rrule][count_child]'] = $count;
  314. }
  315. else {
  316. $edit['field_test[und][0][rrule][range_of_repeat]'] = 'UNTIL';
  317. $date = array(
  318. 'year' => $current_year + 1,
  319. 'month' => '10',
  320. 'day' => '07'
  321. );
  322. $edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][until_child]', $options, $date);
  323. }
  324. // Test date exceptions and/or additions
  325. if ($exclude_include !== NULL) {
  326. $exclude_include_edit = array();
  327. switch ($exclude_include) {
  328. case 'exclude':
  329. $exclude_include_edit['field_test[und][0][rrule][show_exceptions]'] = TRUE;
  330. $date = array(
  331. 'year' => $current_year,
  332. 'month' => '10',
  333. 'day' => '07'
  334. );
  335. $exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][exceptions][EXDATE][0]', $options, $date);
  336. break;
  337. case 'include':
  338. $exclude_include_edit['field_test[und][0][rrule][show_additions]'] = TRUE;
  339. $date = array(
  340. 'year' => $current_year + 3,
  341. 'month' => '10',
  342. 'day' => '07'
  343. );
  344. $exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][additions][RDATE][0]', $options, $date);
  345. break;
  346. case 'exclude_include':
  347. $exclude_include_edit['field_test[und][0][rrule][show_exceptions]'] = TRUE;
  348. $date = array(
  349. 'year' => $current_year,
  350. 'month' => '10',
  351. 'day' => '07'
  352. );
  353. $exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][exceptions][EXDATE][0]', $options, $date);
  354. $exclude_include_edit['field_test[und][0][rrule][show_additions]'] = TRUE;
  355. $date = array(
  356. 'year' => $current_year + 3,
  357. 'month' => '10',
  358. 'day' => '07'
  359. );
  360. $exclude_include_edit += $this->formatDateForRRULEInputs('field_test[und][0][rrule][additions][RDATE][0]', $options, $date);
  361. break;
  362. }
  363. $edit += $exclude_include_edit;
  364. }
  365. }
  366. $this->drupalPost('node/add/date', $edit, t('Save'));
  367. $this->assertText($edit['body[und][0][value]'], 'Test node has been created');
  368. // Return the settings for later use in verification
  369. return $edit;
  370. }
  371. function verifyDateForm($edit) {
  372. $title = $edit['title'];
  373. $node = $this->drupalGetNodeByTitle($title);
  374. $this->drupalGet("node/{$node->nid}/edit");
  375. foreach ($edit as $field => $value) {
  376. $this->assertFieldByName($field, $value);
  377. }
  378. $this->drupalPost("node/{$node->nid}/delete", NULL, t('Delete'));
  379. $this->assertRaw(t('Date %title has been deleted.', array('%title' => $title)), t('Deleted Date content.'));
  380. }
  381. function createDateField($type, $widget, $display_all_day = FALSE) {
  382. $edit = array();
  383. $edit['fields[_add_new_field][label]'] = 'Test';
  384. $edit['fields[_add_new_field][field_name]'] = 'test';
  385. $edit['fields[_add_new_field][weight]'] = '-4';
  386. $edit['fields[_add_new_field][type]'] = $type;
  387. $edit['fields[_add_new_field][widget_type]'] = $widget;
  388. $label = $edit['fields[_add_new_field][label]'];
  389. $field_edit = array();
  390. $field_edit['field[settings][repeat]'] = 1;
  391. $instance_edit = array();
  392. switch ($widget) {
  393. case 'select':
  394. case 'popup':
  395. $instance_edit['instance[widget][settings][year_range][years_back]'] = '-5';
  396. $instance_edit['instance[widget][settings][year_range][years_forward]'] = '+5';
  397. break;
  398. }
  399. if ($display_all_day) {
  400. $instance_edit['instance[widget][settings][display_all_day]'] = TRUE;
  401. }
  402. // First step : 'Add new field' on the 'Manage fields' page.
  403. $this->drupalPost('admin/structure/types/manage/date/fields', $edit, t('Save'));
  404. $this->assertRaw(t('These settings apply to the %label field everywhere it is used.', array('%label' => $label)), t('Field settings page was displayed.'));
  405. // Second step : 'Field settings' form.
  406. $this->drupalPost(NULL, $field_edit, t('Save field settings'));
  407. $this->assertRaw(t('Updated field %label field settings.', array('%label' => $label)), t('Redirected to instance and widget settings page.'));
  408. // Third step : 'Instance settings' form.
  409. $this->drupalPost(NULL, $instance_edit, t('Save settings'));
  410. $this->assertRaw(t('Saved %label configuration.', array('%label' => $label)), t('Redirected to "Manage fields" page.'));
  411. // Check that the field appears in the overview form.
  412. $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $label, t('Field was created and appears in the overview page.'));
  413. }
  414. function deleteDateField() {
  415. $this->drupalGet('admin/structure/types/manage/date/fields');
  416. $this->clickLink('delete');
  417. $this->drupalPost(NULL, NULL, t('Delete'));
  418. $this->assertText(t('The field Test has been deleted from the Date content type.'), t('Removed date field.'));
  419. }
  420. function formatDateForRRULEInputs($form_field_name, $date_widget_type, $date) {
  421. $return = array();
  422. switch ($date_widget_type) {
  423. case 'select':
  424. $return["{$form_field_name}[datetime][year]"] = $date['year'];
  425. $return["{$form_field_name}[datetime][month]"] = $date['month'];
  426. $return["{$form_field_name}[datetime][day]"] = ltrim($date['day'], '0');
  427. break;
  428. case 'text':
  429. case 'popup':
  430. $return["{$form_field_name}[datetime][date]"] = "{$date['year']}-{$date['month']}-{$date['day']}";
  431. break;
  432. }
  433. return $return;
  434. }
  435. }