@@ -312,6 +312,48 @@ func TestRepositoryRule_UnmarshalJSON(t *testing.T) {
312
312
},
313
313
wantErr : true ,
314
314
},
315
+ "Valid max_file_path_length params" : {
316
+ data : `{"type":"max_file_path_length","parameters":{"max_file_path_length": 255}}` ,
317
+ want : NewMaxFilePathLengthRule (& RuleMaxFilePathLengthParameters {
318
+ MaxFilePathLength : 255 ,
319
+ }),
320
+ },
321
+ "Invalid max_file_path_length params" : {
322
+ data : `{"type":"max_file_path_length","parameters":{"max_file_path_length": "255"}}` ,
323
+ want : & RepositoryRule {
324
+ Type : "max_file_path_length" ,
325
+ Parameters : nil ,
326
+ },
327
+ wantErr : true ,
328
+ },
329
+ "Valid file_extension_restriction params" : {
330
+ data : `{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":[".exe"]}}` ,
331
+ want : NewFileExtensionRestrictionRule (& RuleFileExtensionRestrictionParameters {
332
+ RestrictedFileExtensions : []string {".exe" },
333
+ }),
334
+ },
335
+ "Invalid file_extension_restriction params" : {
336
+ data : `{"type":"file_extension_restriction","parameters":{"restricted_file_extensions":true}}` ,
337
+ want : & RepositoryRule {
338
+ Type : "file_extension_restriction" ,
339
+ Parameters : nil ,
340
+ },
341
+ wantErr : true ,
342
+ },
343
+ "Valid max_file_size params" : {
344
+ data : `{"type":"max_file_size","parameters":{"max_file_size": 1024}}` ,
345
+ want : NewMaxFileSizeRule (& RuleMaxFileSizeParameters {
346
+ MaxFileSize : 1024 ,
347
+ }),
348
+ },
349
+ "Invalid max_file_size params" : {
350
+ data : `{"type":"max_file_size","parameters":{"max_file_size": "1024"}}` ,
351
+ want : & RepositoryRule {
352
+ Type : "max_file_size" ,
353
+ Parameters : nil ,
354
+ },
355
+ wantErr : true ,
356
+ },
315
357
}
316
358
317
359
for name , tc := range tests {
@@ -539,6 +581,94 @@ func TestRepositoriesService_CreateRuleset(t *testing.T) {
539
581
})
540
582
}
541
583
584
+ func TestRepositoriesService_CreateRulesetWithPushRules (t * testing.T ) {
585
+ client , mux , _ , teardown := setup ()
586
+ defer teardown ()
587
+
588
+ mux .HandleFunc ("/repos/o/repo/rulesets" , func (w http.ResponseWriter , r * http.Request ) {
589
+ testMethod (t , r , "POST" )
590
+ fmt .Fprint (w , `{
591
+ "id": 42,
592
+ "name": "ruleset",
593
+ "source_type": "Repository",
594
+ "source": "o/repo",
595
+ "enforcement": "enabled",
596
+ "target": "push",
597
+ "rules": [
598
+ {
599
+ "type": "file_path_restriction",
600
+ "parameters": {
601
+ "restricted_file_paths": ["/a/file"]
602
+ }
603
+ },
604
+ {
605
+ "type": "max_file_path_length",
606
+ "parameters": {
607
+ "max_file_path_length": 255
608
+ }
609
+ },
610
+ {
611
+ "type": "file_extension_restriction",
612
+ "parameters": {
613
+ "restricted_file_extensions": [".exe"]
614
+ }
615
+ },
616
+ {
617
+ "type": "max_file_size",
618
+ "parameters": {
619
+ "max_file_size": 1024
620
+ }
621
+ }
622
+ ]
623
+ }` )
624
+ })
625
+
626
+ ctx := context .Background ()
627
+ ruleSet , _ , err := client .Repositories .CreateRuleset (ctx , "o" , "repo" , & Ruleset {
628
+ Name : "ruleset" ,
629
+ Enforcement : "enabled" ,
630
+ })
631
+ if err != nil {
632
+ t .Errorf ("Repositories.CreateRuleset returned error: %v" , err )
633
+ }
634
+
635
+ want := & Ruleset {
636
+ ID : Int64 (42 ),
637
+ Name : "ruleset" ,
638
+ SourceType : String ("Repository" ),
639
+ Source : "o/repo" ,
640
+ Target : String ("push" ),
641
+ Enforcement : "enabled" ,
642
+ Rules : []* RepositoryRule {
643
+ NewFilePathRestrictionRule (& RuleFileParameters {
644
+ RestrictedFilePaths : & []string {"/a/file" },
645
+ }),
646
+ NewMaxFilePathLengthRule (& RuleMaxFilePathLengthParameters {
647
+ MaxFilePathLength : 255 ,
648
+ }),
649
+ NewFileExtensionRestrictionRule (& RuleFileExtensionRestrictionParameters {
650
+ RestrictedFileExtensions : []string {".exe" },
651
+ }),
652
+ NewMaxFileSizeRule (& RuleMaxFileSizeParameters {
653
+ MaxFileSize : 1024 ,
654
+ }),
655
+ },
656
+ }
657
+ if ! cmp .Equal (ruleSet , want ) {
658
+ t .Errorf ("Repositories.CreateRuleset returned %+v, want %+v" , ruleSet , want )
659
+ }
660
+
661
+ const methodName = "CreateRuleset"
662
+
663
+ testNewRequestAndDoFailure (t , methodName , client , func () (* Response , error ) {
664
+ got , resp , err := client .Repositories .CreateRuleset (ctx , "o" , "repo" , & Ruleset {})
665
+ if got != nil {
666
+ t .Errorf ("testNewRequestAndDoFailure %v = %#v, want nil" , methodName , got )
667
+ }
668
+ return resp , err
669
+ })
670
+ }
671
+
542
672
func TestRepositoriesService_GetRuleset (t * testing.T ) {
543
673
client , mux , _ , teardown := setup ()
544
674
defer teardown ()
0 commit comments