From c0087cae674282bb6ed7c61b3d97a69b76739987 Mon Sep 17 00:00:00 2001
From: Paula Barszcz <paula.anna.barszcz@gmail.com>
Date: Thu, 20 Oct 2022 21:08:48 +0200
Subject: [PATCH] Add [GitHubLastCommit] by committer badge (#8537)

* add github last commit by committer badge

* modify queryParam

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
---
 services/github/github-last-commit.service.js | 34 +++++++++++++++++--
 services/github/github-last-commit.tester.js  |  4 +++
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/services/github/github-last-commit.service.js b/services/github/github-last-commit.service.js
index 509f5422f6..e9a1fa588b 100644
--- a/services/github/github-last-commit.service.js
+++ b/services/github/github-last-commit.service.js
@@ -15,14 +15,28 @@ const schema = Joi.array()
         author: Joi.object({
           date: Joi.string().required(),
         }).required(),
+        committer: Joi.object({
+          date: Joi.string().required(),
+        }).required(),
       }).required(),
     }).required()
   )
   .required()
 
+const queryParamSchema = Joi.object({
+  display_timestamp: Joi.string()
+    .valid('author', 'committer')
+    .default('author'),
+}).required()
+
 export default class GithubLastCommit extends GithubAuthV3Service {
   static category = 'activity'
-  static route = { base: 'github/last-commit', pattern: ':user/:repo/:branch*' }
+  static route = {
+    base: 'github/last-commit',
+    pattern: ':user/:repo/:branch*',
+    queryParamSchema,
+  }
+
   static examples = [
     {
       title: 'GitHub last commit',
@@ -45,6 +59,17 @@ export default class GithubLastCommit extends GithubAuthV3Service {
       staticPreview: this.render({ commitDate: '2013-07-31T20:01:41Z' }),
       ...commonExampleAttrs,
     },
+    {
+      title: 'GitHub last commit (by committer)',
+      pattern: ':user/:repo',
+      namedParams: {
+        user: 'google',
+        repo: 'skia',
+      },
+      queryParams: { display_timestamp: 'committer' },
+      staticPreview: this.render({ commitDate: '2022-10-15T20:01:41Z' }),
+      ...commonExampleAttrs,
+    },
   ]
 
   static defaultBadgeData = { label: 'last commit' }
@@ -65,8 +90,11 @@ export default class GithubLastCommit extends GithubAuthV3Service {
     })
   }
 
-  async handle({ user, repo, branch }) {
+  async handle({ user, repo, branch }, queryParams) {
     const body = await this.fetch({ user, repo, branch })
-    return this.constructor.render({ commitDate: body[0].commit.author.date })
+
+    return this.constructor.render({
+      commitDate: body[0].commit[queryParams.display_timestamp].date,
+    })
   }
 }
diff --git a/services/github/github-last-commit.tester.js b/services/github/github-last-commit.tester.js
index 23eed9fb37..f1399dc3d1 100644
--- a/services/github/github-last-commit.tester.js
+++ b/services/github/github-last-commit.tester.js
@@ -14,6 +14,10 @@ t.create('last commit (on branch)')
   .get('/badges/badgr.co/shielded.json')
   .expectBadge({ label: 'last commit', message: 'july 2013' })
 
+t.create('last commit (by committer)')
+  .get('/badges/badgr.co/shielded.json?display_timestamp=committer')
+  .expectBadge({ label: 'last commit', message: 'july 2013' })
+
 t.create('last commit (repo not found)')
   .get('/badges/helmets.json')
   .expectBadge({ label: 'last commit', message: 'repo not found' })
-- 
GitLab