| 647 | } |
| 648 | |
| 649 | func TestFetchPullRequestStatus(t *testing.T) { |
| 650 | t.Parallel() |
| 651 | |
| 652 | type review struct { |
| 653 | ID int64 `json:"id"` |
| 654 | State string `json:"state"` |
| 655 | User struct { |
| 656 | Login string `json:"login"` |
| 657 | } `json:"user"` |
| 658 | } |
| 659 | |
| 660 | makeReview := func(id int64, state, login string) review { |
| 661 | r := review{ID: id, State: state} |
| 662 | r.User.Login = login |
| 663 | return r |
| 664 | } |
| 665 | |
| 666 | tests := []struct { |
| 667 | name string |
| 668 | pullJSON string |
| 669 | reviews []review |
| 670 | expectedState gitprovider.PRState |
| 671 | expectedDraft bool |
| 672 | changesRequested bool |
| 673 | }{ |
| 674 | { |
| 675 | name: "OpenPR/NoReviews", |
| 676 | pullJSON: `{"state":"open","merged":false,"draft":false,"additions":10,"deletions":5,"changed_files":3,"head":{"sha":"abc123","ref":"feature-branch"}}`, |
| 677 | reviews: []review{}, |
| 678 | expectedState: gitprovider.PRStateOpen, |
| 679 | expectedDraft: false, |
| 680 | changesRequested: false, |
| 681 | }, |
| 682 | { |
| 683 | name: "OpenPR/SingleChangesRequested", |
| 684 | pullJSON: `{"state":"open","merged":false,"draft":false,"additions":10,"deletions":5,"changed_files":3,"head":{"sha":"abc123","ref":"feature-branch"}}`, |
| 685 | reviews: []review{makeReview(1, "CHANGES_REQUESTED", "alice")}, |
| 686 | expectedState: gitprovider.PRStateOpen, |
| 687 | changesRequested: true, |
| 688 | }, |
| 689 | { |
| 690 | name: "OpenPR/ChangesRequestedThenApproved", |
| 691 | pullJSON: `{"state":"open","merged":false,"draft":false,"additions":10,"deletions":5,"changed_files":3,"head":{"sha":"abc123","ref":"feature-branch"}}`, |
| 692 | reviews: []review{ |
| 693 | makeReview(1, "CHANGES_REQUESTED", "alice"), |
| 694 | makeReview(2, "APPROVED", "alice"), |
| 695 | }, |
| 696 | expectedState: gitprovider.PRStateOpen, |
| 697 | changesRequested: false, |
| 698 | }, |
| 699 | { |
| 700 | name: "OpenPR/ChangesRequestedThenDismissed", |
| 701 | pullJSON: `{"state":"open","merged":false,"draft":false,"additions":10,"deletions":5,"changed_files":3,"head":{"sha":"abc123","ref":"feature-branch"}}`, |
| 702 | reviews: []review{ |
| 703 | makeReview(1, "CHANGES_REQUESTED", "alice"), |
| 704 | makeReview(2, "DISMISSED", "alice"), |
| 705 | }, |
| 706 | expectedState: gitprovider.PRStateOpen, |