mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	Fixes: https://codeberg.org/forgejo/forgejo/issues/820 (cherry picked from commit6a7022ebbb) (cherry picked from commit764eac47b5) (cherry picked from commit14480339f0) (cherry picked from commitfb930bd719) (cherry picked from commit97d1166aba) (cherry picked from commit97b2abc767) (cherry picked from commit3854c9112f)
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package auth
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
type scopeTestNormalize struct {
 | 
						|
	in  AccessTokenScope
 | 
						|
	out AccessTokenScope
 | 
						|
	err error
 | 
						|
}
 | 
						|
 | 
						|
func TestAccessTokenScope_Normalize(t *testing.T) {
 | 
						|
	tests := []scopeTestNormalize{
 | 
						|
		{"", "", nil},
 | 
						|
		{"write:misc,write:notification,read:package,write:notification,public-only", "public-only,write:misc,write:notification,read:package", nil},
 | 
						|
		{"all,sudo", "all", nil},
 | 
						|
		{"write:activitypub,write:admin,write:misc,write:notification,write:organization,write:package,write:issue,write:repository,write:user", "all", nil},
 | 
						|
		{"write:activitypub,write:admin,write:misc,write:notification,write:organization,write:package,write:issue,write:repository,write:user,public-only", "public-only,all", nil},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, scope := range []string{"activitypub", "admin", "misc", "notification", "organization", "package", "issue", "repository", "user"} {
 | 
						|
		tests = append(tests,
 | 
						|
			scopeTestNormalize{AccessTokenScope(fmt.Sprintf("read:%s", scope)), AccessTokenScope(fmt.Sprintf("read:%s", scope)), nil},
 | 
						|
			scopeTestNormalize{AccessTokenScope(fmt.Sprintf("write:%s", scope)), AccessTokenScope(fmt.Sprintf("write:%s", scope)), nil},
 | 
						|
			scopeTestNormalize{AccessTokenScope(fmt.Sprintf("write:%[1]s,read:%[1]s", scope)), AccessTokenScope(fmt.Sprintf("write:%s", scope)), nil},
 | 
						|
			scopeTestNormalize{AccessTokenScope(fmt.Sprintf("read:%[1]s,write:%[1]s", scope)), AccessTokenScope(fmt.Sprintf("write:%s", scope)), nil},
 | 
						|
			scopeTestNormalize{AccessTokenScope(fmt.Sprintf("read:%[1]s,write:%[1]s,write:%[1]s", scope)), AccessTokenScope(fmt.Sprintf("write:%s", scope)), nil},
 | 
						|
		)
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		t.Run(string(test.in), func(t *testing.T) {
 | 
						|
			scope, err := test.in.Normalize()
 | 
						|
			assert.Equal(t, test.out, scope)
 | 
						|
			assert.Equal(t, test.err, err)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
type scopeTestHasScope struct {
 | 
						|
	in    AccessTokenScope
 | 
						|
	scope AccessTokenScope
 | 
						|
	out   bool
 | 
						|
	err   error
 | 
						|
}
 | 
						|
 | 
						|
func TestAccessTokenScope_HasScope(t *testing.T) {
 | 
						|
	tests := []scopeTestHasScope{
 | 
						|
		{"read:admin", "write:package", false, nil},
 | 
						|
		{"all", "write:package", true, nil},
 | 
						|
		{"write:package", "all", false, nil},
 | 
						|
		{"public-only", "read:issue", false, nil},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, scope := range []string{"activitypub", "admin", "misc", "notification", "organization", "package", "issue", "repository", "user"} {
 | 
						|
		tests = append(tests,
 | 
						|
			scopeTestHasScope{
 | 
						|
				AccessTokenScope(fmt.Sprintf("read:%s", scope)),
 | 
						|
				AccessTokenScope(fmt.Sprintf("read:%s", scope)), true, nil,
 | 
						|
			},
 | 
						|
			scopeTestHasScope{
 | 
						|
				AccessTokenScope(fmt.Sprintf("write:%s", scope)),
 | 
						|
				AccessTokenScope(fmt.Sprintf("write:%s", scope)), true, nil,
 | 
						|
			},
 | 
						|
			scopeTestHasScope{
 | 
						|
				AccessTokenScope(fmt.Sprintf("write:%s", scope)),
 | 
						|
				AccessTokenScope(fmt.Sprintf("read:%s", scope)), true, nil,
 | 
						|
			},
 | 
						|
			scopeTestHasScope{
 | 
						|
				AccessTokenScope(fmt.Sprintf("read:%s", scope)),
 | 
						|
				AccessTokenScope(fmt.Sprintf("write:%s", scope)), false, nil,
 | 
						|
			},
 | 
						|
		)
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		t.Run(string(test.in), func(t *testing.T) {
 | 
						|
			hasScope, err := test.in.HasScope(test.scope)
 | 
						|
			assert.Equal(t, test.out, hasScope)
 | 
						|
			assert.Equal(t, test.err, err)
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |