1use std::str::FromStr;
8
9use derive_builder::Builder;
10use thiserror::Error;
11
12use crate::api::common::NameOrId;
13use crate::api::endpoint_prelude::*;
14use crate::api::ParamValue;
15
16#[derive(Debug, Error)]
18#[non_exhaustive]
19pub enum PipelineScheduleCronError {
20 #[error("parse error: {}", reason)]
22 ParseError {
23 reason: String,
25 },
26}
27
28#[derive(Debug, Clone, PartialEq, Eq)]
30pub struct PipelineScheduleCron {
31 cron: String,
32}
33
34impl PipelineScheduleCron {
35 pub fn new<E>(expression: E) -> Result<Self, PipelineScheduleCronError>
37 where
38 E: AsRef<str>,
39 {
40 Self::new_impl(expression.as_ref())
41 }
42
43 fn new_impl(expression: &str) -> Result<Self, PipelineScheduleCronError> {
44 if cron::Schedule::from_str(expression).is_err() {
45 let compat_expression = format!("* {}", expression);
47 let _ = cron::Schedule::from_str(&compat_expression).map_err(|err| {
48 PipelineScheduleCronError::ParseError {
49 reason: err.to_string(),
50 }
51 })?;
52 };
53
54 Ok(Self {
55 cron: expression.into(),
56 })
57 }
58}
59
60impl<'a> ParamValue<'a> for &'a PipelineScheduleCron {
61 fn as_value(&self) -> Cow<'a, str> {
62 self.cron.as_str().into()
63 }
64}
65
66#[derive(Debug, Clone, PartialEq, Eq)]
73#[non_exhaustive]
74pub enum PipelineScheduleTimeZone<'a> {
75 InternationalDateLineWest,
77 AmericanSamoa,
79 MidwayIsland,
81 Hawaii,
83 Alaska,
85 PacificTimeUSCanada,
87 Tijuana,
89 Arizona,
91 Mazatlan,
93 MountainTimeUSCanada,
95 CentralAmerica,
97 CentralTimeUSCanada,
99 Chihuahua,
101 Guadalajara,
103 MexicoCity,
105 Monterrey,
107 Saskatchewan,
109 Bogota,
111 EasternTimeUSCanada,
113 IndianaEast,
115 Lima,
117 Quito,
119 AtlanticTimeCanada,
121 Caracas,
123 Georgetown,
125 LaPaz,
127 PuertoRico,
129 Santiago,
131 Newfoundland,
133 Brasilia,
135 BuenosAires,
137 Greenland,
139 Montevideo,
141 MidAtlantic,
143 Azores,
145 CapeVerdeIslands,
147 Edinburgh,
149 Lisbon,
151 London,
153 Monrovia,
155 UTC,
157 Amsterdam,
159 Belgrade,
161 Berlin,
163 Bern,
165 Bratislava,
167 Brussels,
169 Budapest,
171 Casablanca,
173 Copenhagen,
175 Dublin,
177 Ljubljana,
179 Madrid,
181 Paris,
183 Prague,
185 Rome,
187 Sarajevo,
189 Skopje,
191 Stockholm,
193 Vienna,
195 Warsaw,
197 WestCentralAfrica,
199 Zagreb,
201 Zurich,
203 Athens,
205 Bucharest,
207 Cairo,
209 Harare,
211 Helsinki,
213 Jerusalem,
215 Kaliningrad,
217 Kyiv,
219 Pretoria,
221 Riga,
223 Sofia,
225 Tallinn,
227 Vilnius,
229 Baghdad,
231 Istanbul,
233 Kuwait,
235 Minsk,
237 Moscow,
239 Nairobi,
241 Riyadh,
243 StPetersburg,
245 Volgograd,
247 Tehran,
249 AbuDhabi,
251 Baku,
253 Muscat,
255 Samara,
257 Tbilisi,
259 Yerevan,
261 Kabul,
263 Ekaterinburg,
265 Islamabad,
267 Karachi,
269 Tashkent,
271 Chennai,
273 Kolkata,
275 Mumbai,
277 NewDelhi,
279 SriJayawardenepura,
281 Kathmandu,
283 Almaty,
285 Astana,
287 Dhaka,
289 Urumqi,
291 Rangoon,
293 Bangkok,
295 Hanoi,
297 Jakarta,
299 Krasnoyarsk,
301 Novosibirsk,
303 Beijing,
305 Chongqing,
307 HongKong,
309 Irkutsk,
311 KualaLumpur,
313 Perth,
315 Singapore,
317 Taipei,
319 Ulaanbaatar,
321 Osaka,
323 Sapporo,
325 Seoul,
327 Tokyo,
329 Yakutsk,
331 Adelaide,
333 Darwin,
335 Brisbane,
337 Canberra,
339 Guam,
341 Hobart,
343 Melbourne,
345 PortMoresby,
347 Sydney,
349 Vladivostok,
351 Magadan,
353 NewCaledonia,
355 SolomonIslands,
357 Srednekolymsk,
359 Auckland,
361 Fiji,
363 Kamchatka,
365 MarshallIslands,
367 Wellington,
369 ChathamIslands,
371 Nukualofa,
373 Samoa,
375 TokelauIslands,
377 Custom(Cow<'a, str>),
379}
380
381impl PipelineScheduleTimeZone<'_> {
382 fn as_str(&self) -> &str {
383 match *self {
384 Self::InternationalDateLineWest => "International Date Line West",
385 Self::AmericanSamoa => "American Samoa",
386 Self::MidwayIsland => "Midway Island",
387 Self::Hawaii => "Hawaii",
388 Self::Alaska => "Alaska",
389 Self::PacificTimeUSCanada => "Pacific Time (US & Canada)",
390 Self::Tijuana => "Tijuana",
391 Self::Arizona => "Arizona",
392 Self::Mazatlan => "Mazatlan",
393 Self::MountainTimeUSCanada => "Mountain Time (US & Canada)",
394 Self::CentralAmerica => "Central America",
395 Self::CentralTimeUSCanada => "Central Time (US & Canada)",
396 Self::Chihuahua => "Chihuahua",
397 Self::Guadalajara => "Guadalajara",
398 Self::MexicoCity => "Mexico City",
399 Self::Monterrey => "Monterrey",
400 Self::Saskatchewan => "Saskatchewan",
401 Self::Bogota => "Bogota",
402 Self::EasternTimeUSCanada => "Eastern Time (US & Canada)",
403 Self::IndianaEast => "Indiana (East)",
404 Self::Lima => "Lima",
405 Self::Quito => "Quito",
406 Self::AtlanticTimeCanada => "Atlantic Time (Canada)",
407 Self::Caracas => "Caracas",
408 Self::Georgetown => "Georgetown",
409 Self::LaPaz => "La Paz",
410 Self::PuertoRico => "Puerto Rico",
411 Self::Santiago => "Santiago",
412 Self::Newfoundland => "Newfoundland",
413 Self::Brasilia => "Brasilia",
414 Self::BuenosAires => "Buenos Aires",
415 Self::Greenland => "Greenland",
416 Self::Montevideo => "Montevideo",
417 Self::MidAtlantic => "Mid-Atlantic",
418 Self::Azores => "Azores",
419 Self::CapeVerdeIslands => "Cape Verde Is.",
420 Self::Edinburgh => "Edinburgh",
421 Self::Lisbon => "Lisbon",
422 Self::London => "London",
423 Self::Monrovia => "Monrovia",
424 Self::UTC => "UTC",
425 Self::Amsterdam => "Amsterdam",
426 Self::Belgrade => "Belgrade",
427 Self::Berlin => "Berlin",
428 Self::Bern => "Bern",
429 Self::Bratislava => "Bratislava",
430 Self::Brussels => "Brussels",
431 Self::Budapest => "Budapest",
432 Self::Casablanca => "Casablanca",
433 Self::Copenhagen => "Copenhagen",
434 Self::Dublin => "Dublin",
435 Self::Ljubljana => "Ljubljana",
436 Self::Madrid => "Madrid",
437 Self::Paris => "Paris",
438 Self::Prague => "Prague",
439 Self::Rome => "Rome",
440 Self::Sarajevo => "Sarajevo",
441 Self::Skopje => "Skopje",
442 Self::Stockholm => "Stockholm",
443 Self::Vienna => "Vienna",
444 Self::Warsaw => "Warsaw",
445 Self::WestCentralAfrica => "West Central Africa",
446 Self::Zagreb => "Zagreb",
447 Self::Zurich => "Zurich",
448 Self::Athens => "Athens",
449 Self::Bucharest => "Bucharest",
450 Self::Cairo => "Cairo",
451 Self::Harare => "Harare",
452 Self::Helsinki => "Helsinki",
453 Self::Jerusalem => "Jerusalem",
454 Self::Kaliningrad => "Kaliningrad",
455 Self::Kyiv => "Kyiv",
456 Self::Pretoria => "Pretoria",
457 Self::Riga => "Riga",
458 Self::Sofia => "Sofia",
459 Self::Tallinn => "Tallinn",
460 Self::Vilnius => "Vilnius",
461 Self::Baghdad => "Baghdad",
462 Self::Istanbul => "Istanbul",
463 Self::Kuwait => "Kuwait",
464 Self::Minsk => "Minsk",
465 Self::Moscow => "Moscow",
466 Self::Nairobi => "Nairobi",
467 Self::Riyadh => "Riyadh",
468 Self::StPetersburg => "St. Petersburg",
469 Self::Volgograd => "Volgograd",
470 Self::Tehran => "Tehran",
471 Self::AbuDhabi => "Abu Dhabi",
472 Self::Baku => "Baku",
473 Self::Muscat => "Muscat",
474 Self::Samara => "Samara",
475 Self::Tbilisi => "Tbilisi",
476 Self::Yerevan => "Yerevan",
477 Self::Kabul => "Kabul",
478 Self::Ekaterinburg => "Ekaterinburg",
479 Self::Islamabad => "Islamabad",
480 Self::Karachi => "Karachi",
481 Self::Tashkent => "Tashkent",
482 Self::Chennai => "Chennai",
483 Self::Kolkata => "Kolkata",
484 Self::Mumbai => "Mumbai",
485 Self::NewDelhi => "New Delhi",
486 Self::SriJayawardenepura => "Sri Jayawardenepura",
487 Self::Kathmandu => "Kathmandu",
488 Self::Almaty => "Almaty",
489 Self::Astana => "Astana",
490 Self::Dhaka => "Dhaka",
491 Self::Urumqi => "Urumqi",
492 Self::Rangoon => "Rangoon",
493 Self::Bangkok => "Bangkok",
494 Self::Hanoi => "Hanoi",
495 Self::Jakarta => "Jakarta",
496 Self::Krasnoyarsk => "Krasnoyarsk",
497 Self::Novosibirsk => "Novosibirsk",
498 Self::Beijing => "Beijing",
499 Self::Chongqing => "Chongqing",
500 Self::HongKong => "Hong Kong",
501 Self::Irkutsk => "Irkutsk",
502 Self::KualaLumpur => "Kuala Lumpur",
503 Self::Perth => "Perth",
504 Self::Singapore => "Singapore",
505 Self::Taipei => "Taipei",
506 Self::Ulaanbaatar => "Ulaanbaatar",
507 Self::Osaka => "Osaka",
508 Self::Sapporo => "Sapporo",
509 Self::Seoul => "Seoul",
510 Self::Tokyo => "Tokyo",
511 Self::Yakutsk => "Yakutsk",
512 Self::Adelaide => "Adelaide",
513 Self::Darwin => "Darwin",
514 Self::Brisbane => "Brisbane",
515 Self::Canberra => "Canberra",
516 Self::Guam => "Guam",
517 Self::Hobart => "Hobart",
518 Self::Melbourne => "Melbourne",
519 Self::PortMoresby => "Port Moresby",
520 Self::Sydney => "Sydney",
521 Self::Vladivostok => "Vladivostok",
522 Self::Magadan => "Magadan",
523 Self::NewCaledonia => "New Caledonia",
524 Self::SolomonIslands => "Solomon Is.",
525 Self::Srednekolymsk => "Srednekolymsk",
526 Self::Auckland => "Auckland",
527 Self::Fiji => "Fiji",
528 Self::Kamchatka => "Kamchatka",
529 Self::MarshallIslands => "Marshall Is.",
530 Self::Wellington => "Wellington",
531 Self::ChathamIslands => "Chatham Is.",
532 Self::Nukualofa => "Nuku'alofa",
533 Self::Samoa => "Samoa",
534 Self::TokelauIslands => "Tokelau Is.",
535 Self::Custom(ref s) => s.as_ref(),
536 }
537 }
538}
539
540impl<'a> ParamValue<'a> for &'a PipelineScheduleTimeZone<'a> {
541 fn as_value(&self) -> Cow<'a, str> {
542 self.as_str().into()
543 }
544}
545
546#[derive(Debug, Builder, Clone)]
548#[builder(setter(strip_option))]
549pub struct CreatePipelineSchedule<'a> {
550 #[builder(setter(into))]
552 project: NameOrId<'a>,
553 #[builder(setter(into))]
555 description: Cow<'a, str>,
556 #[builder(setter(into))]
558 ref_: Cow<'a, str>,
559 cron: PipelineScheduleCron,
561
562 #[builder(default)]
566 cron_timezone: Option<PipelineScheduleTimeZone<'a>>,
567 #[builder(default)]
569 active: Option<bool>,
570}
571
572impl<'a> CreatePipelineSchedule<'a> {
573 pub fn builder() -> CreatePipelineScheduleBuilder<'a> {
575 CreatePipelineScheduleBuilder::default()
576 }
577}
578
579impl Endpoint for CreatePipelineSchedule<'_> {
580 fn method(&self) -> Method {
581 Method::POST
582 }
583
584 fn endpoint(&self) -> Cow<'static, str> {
585 format!("projects/{}/pipeline_schedules", self.project).into()
586 }
587
588 fn body(&self) -> Result<Option<(&'static str, Vec<u8>)>, BodyError> {
589 let mut params = FormParams::default();
590
591 params
592 .push("description", &self.description)
593 .push("ref", &self.ref_)
594 .push("cron", &self.cron)
595 .push_opt("cron_timezone", self.cron_timezone.as_ref())
596 .push_opt("active", self.active);
597
598 params.into_body()
599 }
600}
601
602#[cfg(test)]
603mod tests {
604 use http::Method;
605
606 use crate::api::projects::pipeline_schedules::{
607 CreatePipelineSchedule, CreatePipelineScheduleBuilderError, PipelineScheduleCron,
608 PipelineScheduleCronError, PipelineScheduleTimeZone,
609 };
610 use crate::api::{self, ParamValue, Query};
611 use crate::test::client::{ExpectedUrl, SingleTestClient};
612
613 #[test]
614 fn pipeline_schedule_cron_parse() {
615 PipelineScheduleCron::new("0 1 * * *").unwrap();
616 let PipelineScheduleCronError::ParseError {
617 reason,
618 } = PipelineScheduleCron::new("").unwrap_err();
619 assert!(!reason.is_empty());
620 }
621
622 #[test]
623 fn pipeline_schedule_cron_as_param() {
624 let items = &[("0 1 * * *", "0 1 * * *"), ("* 4,5 * * *", "* 4,5 * * *")];
625
626 for (i, s) in items {
627 let cron = PipelineScheduleCron::new(i).unwrap();
628 assert_eq!((&cron).as_value(), *s);
629 }
630 }
631
632 #[test]
633 fn pipeline_timezone_as_str() {
634 let items = &[
635 (
636 PipelineScheduleTimeZone::InternationalDateLineWest,
637 "International Date Line West",
638 ),
639 (PipelineScheduleTimeZone::AmericanSamoa, "American Samoa"),
640 (PipelineScheduleTimeZone::MidwayIsland, "Midway Island"),
641 (PipelineScheduleTimeZone::Hawaii, "Hawaii"),
642 (PipelineScheduleTimeZone::Alaska, "Alaska"),
643 (
644 PipelineScheduleTimeZone::PacificTimeUSCanada,
645 "Pacific Time (US & Canada)",
646 ),
647 (PipelineScheduleTimeZone::Tijuana, "Tijuana"),
648 (PipelineScheduleTimeZone::Arizona, "Arizona"),
649 (PipelineScheduleTimeZone::Mazatlan, "Mazatlan"),
650 (
651 PipelineScheduleTimeZone::MountainTimeUSCanada,
652 "Mountain Time (US & Canada)",
653 ),
654 (PipelineScheduleTimeZone::CentralAmerica, "Central America"),
655 (
656 PipelineScheduleTimeZone::CentralTimeUSCanada,
657 "Central Time (US & Canada)",
658 ),
659 (PipelineScheduleTimeZone::Chihuahua, "Chihuahua"),
660 (PipelineScheduleTimeZone::Guadalajara, "Guadalajara"),
661 (PipelineScheduleTimeZone::MexicoCity, "Mexico City"),
662 (PipelineScheduleTimeZone::Monterrey, "Monterrey"),
663 (PipelineScheduleTimeZone::Saskatchewan, "Saskatchewan"),
664 (PipelineScheduleTimeZone::Bogota, "Bogota"),
665 (
666 PipelineScheduleTimeZone::EasternTimeUSCanada,
667 "Eastern Time (US & Canada)",
668 ),
669 (PipelineScheduleTimeZone::IndianaEast, "Indiana (East)"),
670 (PipelineScheduleTimeZone::Lima, "Lima"),
671 (PipelineScheduleTimeZone::Quito, "Quito"),
672 (
673 PipelineScheduleTimeZone::AtlanticTimeCanada,
674 "Atlantic Time (Canada)",
675 ),
676 (PipelineScheduleTimeZone::Caracas, "Caracas"),
677 (PipelineScheduleTimeZone::Georgetown, "Georgetown"),
678 (PipelineScheduleTimeZone::LaPaz, "La Paz"),
679 (PipelineScheduleTimeZone::PuertoRico, "Puerto Rico"),
680 (PipelineScheduleTimeZone::Santiago, "Santiago"),
681 (PipelineScheduleTimeZone::Newfoundland, "Newfoundland"),
682 (PipelineScheduleTimeZone::Brasilia, "Brasilia"),
683 (PipelineScheduleTimeZone::BuenosAires, "Buenos Aires"),
684 (PipelineScheduleTimeZone::Greenland, "Greenland"),
685 (PipelineScheduleTimeZone::Montevideo, "Montevideo"),
686 (PipelineScheduleTimeZone::MidAtlantic, "Mid-Atlantic"),
687 (PipelineScheduleTimeZone::Azores, "Azores"),
688 (PipelineScheduleTimeZone::CapeVerdeIslands, "Cape Verde Is."),
689 (PipelineScheduleTimeZone::Edinburgh, "Edinburgh"),
690 (PipelineScheduleTimeZone::Lisbon, "Lisbon"),
691 (PipelineScheduleTimeZone::London, "London"),
692 (PipelineScheduleTimeZone::Monrovia, "Monrovia"),
693 (PipelineScheduleTimeZone::UTC, "UTC"),
694 (PipelineScheduleTimeZone::Amsterdam, "Amsterdam"),
695 (PipelineScheduleTimeZone::Belgrade, "Belgrade"),
696 (PipelineScheduleTimeZone::Berlin, "Berlin"),
697 (PipelineScheduleTimeZone::Bern, "Bern"),
698 (PipelineScheduleTimeZone::Bratislava, "Bratislava"),
699 (PipelineScheduleTimeZone::Brussels, "Brussels"),
700 (PipelineScheduleTimeZone::Budapest, "Budapest"),
701 (PipelineScheduleTimeZone::Casablanca, "Casablanca"),
702 (PipelineScheduleTimeZone::Copenhagen, "Copenhagen"),
703 (PipelineScheduleTimeZone::Dublin, "Dublin"),
704 (PipelineScheduleTimeZone::Ljubljana, "Ljubljana"),
705 (PipelineScheduleTimeZone::Madrid, "Madrid"),
706 (PipelineScheduleTimeZone::Paris, "Paris"),
707 (PipelineScheduleTimeZone::Prague, "Prague"),
708 (PipelineScheduleTimeZone::Rome, "Rome"),
709 (PipelineScheduleTimeZone::Sarajevo, "Sarajevo"),
710 (PipelineScheduleTimeZone::Skopje, "Skopje"),
711 (PipelineScheduleTimeZone::Stockholm, "Stockholm"),
712 (PipelineScheduleTimeZone::Vienna, "Vienna"),
713 (PipelineScheduleTimeZone::Warsaw, "Warsaw"),
714 (
715 PipelineScheduleTimeZone::WestCentralAfrica,
716 "West Central Africa",
717 ),
718 (PipelineScheduleTimeZone::Zagreb, "Zagreb"),
719 (PipelineScheduleTimeZone::Zurich, "Zurich"),
720 (PipelineScheduleTimeZone::Athens, "Athens"),
721 (PipelineScheduleTimeZone::Bucharest, "Bucharest"),
722 (PipelineScheduleTimeZone::Cairo, "Cairo"),
723 (PipelineScheduleTimeZone::Harare, "Harare"),
724 (PipelineScheduleTimeZone::Helsinki, "Helsinki"),
725 (PipelineScheduleTimeZone::Jerusalem, "Jerusalem"),
726 (PipelineScheduleTimeZone::Kaliningrad, "Kaliningrad"),
727 (PipelineScheduleTimeZone::Kyiv, "Kyiv"),
728 (PipelineScheduleTimeZone::Pretoria, "Pretoria"),
729 (PipelineScheduleTimeZone::Riga, "Riga"),
730 (PipelineScheduleTimeZone::Sofia, "Sofia"),
731 (PipelineScheduleTimeZone::Tallinn, "Tallinn"),
732 (PipelineScheduleTimeZone::Vilnius, "Vilnius"),
733 (PipelineScheduleTimeZone::Baghdad, "Baghdad"),
734 (PipelineScheduleTimeZone::Istanbul, "Istanbul"),
735 (PipelineScheduleTimeZone::Kuwait, "Kuwait"),
736 (PipelineScheduleTimeZone::Minsk, "Minsk"),
737 (PipelineScheduleTimeZone::Moscow, "Moscow"),
738 (PipelineScheduleTimeZone::Nairobi, "Nairobi"),
739 (PipelineScheduleTimeZone::Riyadh, "Riyadh"),
740 (PipelineScheduleTimeZone::StPetersburg, "St. Petersburg"),
741 (PipelineScheduleTimeZone::Volgograd, "Volgograd"),
742 (PipelineScheduleTimeZone::Tehran, "Tehran"),
743 (PipelineScheduleTimeZone::AbuDhabi, "Abu Dhabi"),
744 (PipelineScheduleTimeZone::Baku, "Baku"),
745 (PipelineScheduleTimeZone::Muscat, "Muscat"),
746 (PipelineScheduleTimeZone::Samara, "Samara"),
747 (PipelineScheduleTimeZone::Tbilisi, "Tbilisi"),
748 (PipelineScheduleTimeZone::Yerevan, "Yerevan"),
749 (PipelineScheduleTimeZone::Kabul, "Kabul"),
750 (PipelineScheduleTimeZone::Ekaterinburg, "Ekaterinburg"),
751 (PipelineScheduleTimeZone::Islamabad, "Islamabad"),
752 (PipelineScheduleTimeZone::Karachi, "Karachi"),
753 (PipelineScheduleTimeZone::Tashkent, "Tashkent"),
754 (PipelineScheduleTimeZone::Chennai, "Chennai"),
755 (PipelineScheduleTimeZone::Kolkata, "Kolkata"),
756 (PipelineScheduleTimeZone::Mumbai, "Mumbai"),
757 (PipelineScheduleTimeZone::NewDelhi, "New Delhi"),
758 (
759 PipelineScheduleTimeZone::SriJayawardenepura,
760 "Sri Jayawardenepura",
761 ),
762 (PipelineScheduleTimeZone::Kathmandu, "Kathmandu"),
763 (PipelineScheduleTimeZone::Almaty, "Almaty"),
764 (PipelineScheduleTimeZone::Astana, "Astana"),
765 (PipelineScheduleTimeZone::Dhaka, "Dhaka"),
766 (PipelineScheduleTimeZone::Urumqi, "Urumqi"),
767 (PipelineScheduleTimeZone::Rangoon, "Rangoon"),
768 (PipelineScheduleTimeZone::Bangkok, "Bangkok"),
769 (PipelineScheduleTimeZone::Hanoi, "Hanoi"),
770 (PipelineScheduleTimeZone::Jakarta, "Jakarta"),
771 (PipelineScheduleTimeZone::Krasnoyarsk, "Krasnoyarsk"),
772 (PipelineScheduleTimeZone::Novosibirsk, "Novosibirsk"),
773 (PipelineScheduleTimeZone::Beijing, "Beijing"),
774 (PipelineScheduleTimeZone::Chongqing, "Chongqing"),
775 (PipelineScheduleTimeZone::HongKong, "Hong Kong"),
776 (PipelineScheduleTimeZone::Irkutsk, "Irkutsk"),
777 (PipelineScheduleTimeZone::KualaLumpur, "Kuala Lumpur"),
778 (PipelineScheduleTimeZone::Perth, "Perth"),
779 (PipelineScheduleTimeZone::Singapore, "Singapore"),
780 (PipelineScheduleTimeZone::Taipei, "Taipei"),
781 (PipelineScheduleTimeZone::Ulaanbaatar, "Ulaanbaatar"),
782 (PipelineScheduleTimeZone::Osaka, "Osaka"),
783 (PipelineScheduleTimeZone::Sapporo, "Sapporo"),
784 (PipelineScheduleTimeZone::Seoul, "Seoul"),
785 (PipelineScheduleTimeZone::Tokyo, "Tokyo"),
786 (PipelineScheduleTimeZone::Yakutsk, "Yakutsk"),
787 (PipelineScheduleTimeZone::Adelaide, "Adelaide"),
788 (PipelineScheduleTimeZone::Darwin, "Darwin"),
789 (PipelineScheduleTimeZone::Brisbane, "Brisbane"),
790 (PipelineScheduleTimeZone::Canberra, "Canberra"),
791 (PipelineScheduleTimeZone::Guam, "Guam"),
792 (PipelineScheduleTimeZone::Hobart, "Hobart"),
793 (PipelineScheduleTimeZone::Melbourne, "Melbourne"),
794 (PipelineScheduleTimeZone::PortMoresby, "Port Moresby"),
795 (PipelineScheduleTimeZone::Sydney, "Sydney"),
796 (PipelineScheduleTimeZone::Vladivostok, "Vladivostok"),
797 (PipelineScheduleTimeZone::Magadan, "Magadan"),
798 (PipelineScheduleTimeZone::NewCaledonia, "New Caledonia"),
799 (PipelineScheduleTimeZone::SolomonIslands, "Solomon Is."),
800 (PipelineScheduleTimeZone::Srednekolymsk, "Srednekolymsk"),
801 (PipelineScheduleTimeZone::Auckland, "Auckland"),
802 (PipelineScheduleTimeZone::Fiji, "Fiji"),
803 (PipelineScheduleTimeZone::Kamchatka, "Kamchatka"),
804 (PipelineScheduleTimeZone::MarshallIslands, "Marshall Is."),
805 (PipelineScheduleTimeZone::Wellington, "Wellington"),
806 (PipelineScheduleTimeZone::ChathamIslands, "Chatham Is."),
807 (PipelineScheduleTimeZone::Nukualofa, "Nuku'alofa"),
808 (PipelineScheduleTimeZone::Samoa, "Samoa"),
809 (PipelineScheduleTimeZone::TokelauIslands, "Tokelau Is."),
810 (PipelineScheduleTimeZone::Custom("custom".into()), "custom"),
811 ];
812
813 for (i, s) in items {
814 assert_eq!(i.as_str(), *s);
815 }
816 }
817
818 #[test]
819 fn all_required_params_are_necessary() {
820 let err = CreatePipelineSchedule::builder().build().unwrap_err();
821 crate::test::assert_missing_field!(err, CreatePipelineScheduleBuilderError, "project");
822 }
823
824 #[test]
825 fn project_is_necessary() {
826 let err = CreatePipelineSchedule::builder()
827 .description("desc")
828 .ref_("master")
829 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
830 .build()
831 .unwrap_err();
832 crate::test::assert_missing_field!(err, CreatePipelineScheduleBuilderError, "project");
833 }
834
835 #[test]
836 fn description_is_necessary() {
837 let err = CreatePipelineSchedule::builder()
838 .project(1)
839 .ref_("master")
840 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
841 .build()
842 .unwrap_err();
843 crate::test::assert_missing_field!(err, CreatePipelineScheduleBuilderError, "description");
844 }
845
846 #[test]
847 fn ref_is_necessary() {
848 let err = CreatePipelineSchedule::builder()
849 .project(1)
850 .description("desc")
851 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
852 .build()
853 .unwrap_err();
854 crate::test::assert_missing_field!(err, CreatePipelineScheduleBuilderError, "ref_");
855 }
856
857 #[test]
858 fn cron_is_necessary() {
859 let err = CreatePipelineSchedule::builder()
860 .project(1)
861 .description("desc")
862 .ref_("master")
863 .build()
864 .unwrap_err();
865 crate::test::assert_missing_field!(err, CreatePipelineScheduleBuilderError, "cron");
866 }
867
868 #[test]
869 fn all_required_parameters() {
870 CreatePipelineSchedule::builder()
871 .project(1)
872 .description("desc")
873 .ref_("master")
874 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
875 .build()
876 .unwrap();
877 }
878
879 #[test]
880 fn endpoint() {
881 let endpoint = ExpectedUrl::builder()
882 .method(Method::POST)
883 .endpoint("projects/simple%2Fproject/pipeline_schedules")
884 .content_type("application/x-www-form-urlencoded")
885 .body_str(concat!(
886 "description=desc",
887 "&ref=master",
888 "&cron=0+1+*+*+*",
889 ))
890 .build()
891 .unwrap();
892 let client = SingleTestClient::new_raw(endpoint, "");
893
894 let endpoint = CreatePipelineSchedule::builder()
895 .project("simple/project")
896 .description("desc")
897 .ref_("master")
898 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
899 .build()
900 .unwrap();
901 api::ignore(endpoint).query(&client).unwrap();
902 }
903
904 #[test]
905 fn endpoint_cron_timezone() {
906 let endpoint = ExpectedUrl::builder()
907 .method(Method::POST)
908 .endpoint("projects/simple%2Fproject/pipeline_schedules")
909 .content_type("application/x-www-form-urlencoded")
910 .body_str(concat!(
911 "description=desc",
912 "&ref=master",
913 "&cron=0+1+*+*+*",
914 "&cron_timezone=Newfoundland",
915 ))
916 .build()
917 .unwrap();
918 let client = SingleTestClient::new_raw(endpoint, "");
919
920 let endpoint = CreatePipelineSchedule::builder()
921 .project("simple/project")
922 .description("desc")
923 .ref_("master")
924 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
925 .cron_timezone(PipelineScheduleTimeZone::Newfoundland)
926 .build()
927 .unwrap();
928 api::ignore(endpoint).query(&client).unwrap();
929 }
930
931 #[test]
932 fn endpoint_active() {
933 let endpoint = ExpectedUrl::builder()
934 .method(Method::POST)
935 .endpoint("projects/simple%2Fproject/pipeline_schedules")
936 .content_type("application/x-www-form-urlencoded")
937 .body_str(concat!(
938 "description=desc",
939 "&ref=master",
940 "&cron=0+1+*+*+*",
941 "&active=false",
942 ))
943 .build()
944 .unwrap();
945 let client = SingleTestClient::new_raw(endpoint, "");
946
947 let endpoint = CreatePipelineSchedule::builder()
948 .project("simple/project")
949 .description("desc")
950 .ref_("master")
951 .cron(PipelineScheduleCron::new("0 1 * * *").unwrap())
952 .active(false)
953 .build()
954 .unwrap();
955 api::ignore(endpoint).query(&client).unwrap();
956 }
957}