@@ -23,6 +23,24 @@ function toRaw(obj) {
2323const rawPR = toRaw ( {
2424 repository : { pullRequest : firstTimerPR }
2525} ) ;
26+ const headCommitChecks = {
27+ oid : oddCommits . at ( - 1 ) . commit . oid ,
28+ checkSuites : {
29+ nodes : [ {
30+ app : { slug : 'github-actions' } ,
31+ status : 'COMPLETED' ,
32+ conclusion : 'SUCCESS' ,
33+ checkRuns : { nodes : [ ] }
34+ } ]
35+ } ,
36+ status : { state : 'SUCCESS' }
37+ } ;
38+ rawPR . repository . pullRequest . headCommit = {
39+ nodes : [ { commit : toRaw ( headCommitChecks ) } ]
40+ } ;
41+
42+ const commitsWithHeadChecks = toRaw ( oddCommits ) ;
43+ Object . assign ( commitsWithHeadChecks . at ( - 1 ) . commit , headCommitChecks ) ;
2644
2745describe ( 'PRData' , function ( ) {
2846 const request = {
@@ -34,7 +52,8 @@ describe('PRData', function() {
3452 . withArgs ( 'https://raw.githubusercontent.com/nodejs/node/HEAD/README.md' )
3553 . returns ( Promise . resolve ( readme ) ) ;
3654 request . text . returns ( new Error ( 'unknown query' ) ) ;
37- request . gql . withArgs ( 'PR' ) . returns ( Promise . resolve ( rawPR ) ) ;
55+ request . gql . withArgs ( 'PR' ) . callsFake (
56+ ( ) => Promise . resolve ( toRaw ( rawPR ) ) ) ;
3857 request . gql . withArgs ( 'Reviews' ) . returns (
3958 Promise . resolve ( toRaw ( approvingReviews ) ) ) ;
4059 request . gql . withArgs ( 'PRComments' ) . returns (
@@ -53,7 +72,45 @@ describe('PRData', function() {
5372 assert . deepStrictEqual ( data . pr , firstTimerPR , 'pr' ) ;
5473 assert . deepStrictEqual ( data . reviews , approvingReviews , 'reviews' ) ;
5574 assert . deepStrictEqual ( data . comments , commentsWithLGTM , 'comments' ) ;
56- assert . deepStrictEqual ( data . commits , oddCommits , 'commits' ) ;
75+ assert . deepStrictEqual (
76+ data . commits , commitsWithHeadChecks , 'commits' ) ;
5777 assert . deepStrictEqual ( data . reviewers , allGreenReviewers , 'reviewers' ) ;
5878 } ) ;
79+
80+ describe ( 'mergeHeadCommitChecks' , ( ) => {
81+ it ( 'allows an empty commit list' , ( ) => {
82+ const data = new PRData ( argv , new TestCLI ( ) , request ) ;
83+ data . pr = { headCommit : { nodes : [ ] } } ;
84+ data . commits = [ ] ;
85+
86+ data . mergeHeadCommitChecks ( ) ;
87+
88+ assert . deepStrictEqual ( data . pr , { } ) ;
89+ assert . deepStrictEqual ( data . commits , [ ] ) ;
90+ } ) ;
91+
92+ it ( 'rejects missing head commit data' , ( ) => {
93+ const data = new PRData ( argv , new TestCLI ( ) , request ) ;
94+ data . pr = { } ;
95+ data . commits = toRaw ( oddCommits ) ;
96+
97+ assert . throws (
98+ ( ) => data . mergeHeadCommitChecks ( ) ,
99+ / U n a b l e t o m a t c h p u l l r e q u e s t h e a d c o m m i t / ) ;
100+ } ) ;
101+
102+ it ( 'rejects a mismatched head commit' , ( ) => {
103+ const data = new PRData ( argv , new TestCLI ( ) , request ) ;
104+ data . pr = {
105+ headCommit : {
106+ nodes : [ { commit : { ...headCommitChecks , oid : 'different' } } ]
107+ }
108+ } ;
109+ data . commits = toRaw ( oddCommits ) ;
110+
111+ assert . throws (
112+ ( ) => data . mergeHeadCommitChecks ( ) ,
113+ / U n a b l e t o m a t c h p u l l r e q u e s t h e a d c o m m i t / ) ;
114+ } ) ;
115+ } ) ;
59116} ) ;
0 commit comments