code.gitea.io/gitea@v1.22.3/services/webhook/packagist_test.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package webhook
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	webhook_model "code.gitea.io/gitea/models/webhook"
    11  	"code.gitea.io/gitea/modules/json"
    12  	api "code.gitea.io/gitea/modules/structs"
    13  	webhook_module "code.gitea.io/gitea/modules/webhook"
    14  
    15  	"github.com/stretchr/testify/assert"
    16  	"github.com/stretchr/testify/require"
    17  )
    18  
    19  func TestPackagistPayload(t *testing.T) {
    20  	pc := packagistConvertor{
    21  		PackageURL: "https://packagist.org/packages/example",
    22  	}
    23  	t.Run("Create", func(t *testing.T) {
    24  		p := createTestPayload()
    25  
    26  		pl, err := pc.Create(p)
    27  		require.NoError(t, err)
    28  		require.Equal(t, pl, PackagistPayload{})
    29  	})
    30  
    31  	t.Run("Delete", func(t *testing.T) {
    32  		p := deleteTestPayload()
    33  
    34  		pl, err := pc.Delete(p)
    35  		require.NoError(t, err)
    36  		require.Equal(t, pl, PackagistPayload{})
    37  	})
    38  
    39  	t.Run("Fork", func(t *testing.T) {
    40  		p := forkTestPayload()
    41  
    42  		pl, err := pc.Fork(p)
    43  		require.NoError(t, err)
    44  		require.Equal(t, pl, PackagistPayload{})
    45  	})
    46  
    47  	t.Run("Push", func(t *testing.T) {
    48  		p := pushTestPayload()
    49  
    50  		pl, err := pc.Push(p)
    51  		require.NoError(t, err)
    52  
    53  		assert.Equal(t, "https://packagist.org/packages/example", pl.PackagistRepository.URL)
    54  	})
    55  
    56  	t.Run("Issue", func(t *testing.T) {
    57  		p := issueTestPayload()
    58  
    59  		p.Action = api.HookIssueOpened
    60  		pl, err := pc.Issue(p)
    61  		require.NoError(t, err)
    62  		require.Equal(t, pl, PackagistPayload{})
    63  
    64  		p.Action = api.HookIssueClosed
    65  		pl, err = pc.Issue(p)
    66  		require.NoError(t, err)
    67  		require.Equal(t, pl, PackagistPayload{})
    68  	})
    69  
    70  	t.Run("IssueComment", func(t *testing.T) {
    71  		p := issueCommentTestPayload()
    72  
    73  		pl, err := pc.IssueComment(p)
    74  		require.NoError(t, err)
    75  		require.Equal(t, pl, PackagistPayload{})
    76  	})
    77  
    78  	t.Run("PullRequest", func(t *testing.T) {
    79  		p := pullRequestTestPayload()
    80  
    81  		pl, err := pc.PullRequest(p)
    82  		require.NoError(t, err)
    83  		require.Equal(t, pl, PackagistPayload{})
    84  	})
    85  
    86  	t.Run("PullRequestComment", func(t *testing.T) {
    87  		p := pullRequestCommentTestPayload()
    88  
    89  		pl, err := pc.IssueComment(p)
    90  		require.NoError(t, err)
    91  		require.Equal(t, pl, PackagistPayload{})
    92  	})
    93  
    94  	t.Run("Review", func(t *testing.T) {
    95  		p := pullRequestTestPayload()
    96  		p.Action = api.HookIssueReviewed
    97  
    98  		pl, err := pc.Review(p, webhook_module.HookEventPullRequestReviewApproved)
    99  		require.NoError(t, err)
   100  		require.Equal(t, pl, PackagistPayload{})
   101  	})
   102  
   103  	t.Run("Repository", func(t *testing.T) {
   104  		p := repositoryTestPayload()
   105  
   106  		pl, err := pc.Repository(p)
   107  		require.NoError(t, err)
   108  		require.Equal(t, pl, PackagistPayload{})
   109  	})
   110  
   111  	t.Run("Package", func(t *testing.T) {
   112  		p := packageTestPayload()
   113  
   114  		pl, err := pc.Package(p)
   115  		require.NoError(t, err)
   116  		require.Equal(t, pl, PackagistPayload{})
   117  	})
   118  
   119  	t.Run("Wiki", func(t *testing.T) {
   120  		p := wikiTestPayload()
   121  
   122  		p.Action = api.HookWikiCreated
   123  		pl, err := pc.Wiki(p)
   124  		require.NoError(t, err)
   125  		require.Equal(t, pl, PackagistPayload{})
   126  
   127  		p.Action = api.HookWikiEdited
   128  		pl, err = pc.Wiki(p)
   129  		require.NoError(t, err)
   130  		require.Equal(t, pl, PackagistPayload{})
   131  
   132  		p.Action = api.HookWikiDeleted
   133  		pl, err = pc.Wiki(p)
   134  		require.NoError(t, err)
   135  		require.Equal(t, pl, PackagistPayload{})
   136  	})
   137  
   138  	t.Run("Release", func(t *testing.T) {
   139  		p := pullReleaseTestPayload()
   140  
   141  		pl, err := pc.Release(p)
   142  		require.NoError(t, err)
   143  		require.Equal(t, pl, PackagistPayload{})
   144  	})
   145  }
   146  
   147  func TestPackagistJSONPayload(t *testing.T) {
   148  	p := pushTestPayload()
   149  	data, err := p.JSONPayload()
   150  	require.NoError(t, err)
   151  
   152  	hook := &webhook_model.Webhook{
   153  		RepoID:     3,
   154  		IsActive:   true,
   155  		Type:       webhook_module.PACKAGIST,
   156  		URL:        "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN",
   157  		Meta:       `{"package_url":"https://packagist.org/packages/example"}`,
   158  		HTTPMethod: "POST",
   159  	}
   160  	task := &webhook_model.HookTask{
   161  		HookID:         hook.ID,
   162  		EventType:      webhook_module.HookEventPush,
   163  		PayloadContent: string(data),
   164  		PayloadVersion: 2,
   165  	}
   166  
   167  	req, reqBody, err := newPackagistRequest(context.Background(), hook, task)
   168  	require.NotNil(t, req)
   169  	require.NotNil(t, reqBody)
   170  	require.NoError(t, err)
   171  
   172  	assert.Equal(t, "POST", req.Method)
   173  	assert.Equal(t, "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", req.URL.String())
   174  	assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256"))
   175  	assert.Equal(t, "application/json", req.Header.Get("Content-Type"))
   176  	var body PackagistPayload
   177  	err = json.NewDecoder(req.Body).Decode(&body)
   178  	assert.NoError(t, err)
   179  	assert.Equal(t, "https://packagist.org/packages/example", body.PackagistRepository.URL)
   180  }
   181  
   182  func TestPackagistEmptyPayload(t *testing.T) {
   183  	p := createTestPayload()
   184  	data, err := p.JSONPayload()
   185  	require.NoError(t, err)
   186  
   187  	hook := &webhook_model.Webhook{
   188  		RepoID:     3,
   189  		IsActive:   true,
   190  		Type:       webhook_module.PACKAGIST,
   191  		URL:        "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN",
   192  		Meta:       `{"package_url":"https://packagist.org/packages/example"}`,
   193  		HTTPMethod: "POST",
   194  	}
   195  	task := &webhook_model.HookTask{
   196  		HookID:         hook.ID,
   197  		EventType:      webhook_module.HookEventCreate,
   198  		PayloadContent: string(data),
   199  		PayloadVersion: 2,
   200  	}
   201  
   202  	req, reqBody, err := newPackagistRequest(context.Background(), hook, task)
   203  	require.NotNil(t, req)
   204  	require.NotNil(t, reqBody)
   205  	require.NoError(t, err)
   206  
   207  	assert.Equal(t, "POST", req.Method)
   208  	assert.Equal(t, "https://packagist.org/api/update-package?username=THEUSERNAME&apiToken=TOPSECRETAPITOKEN", req.URL.String())
   209  	assert.Equal(t, "sha256=", req.Header.Get("X-Hub-Signature-256"))
   210  	assert.Equal(t, "application/json", req.Header.Get("Content-Type"))
   211  	var body PackagistPayload
   212  	err = json.NewDecoder(req.Body).Decode(&body)
   213  	assert.NoError(t, err)
   214  	assert.Equal(t, "", body.PackagistRepository.URL)
   215  }