code.gitea.io/gitea@v1.22.3/modules/setting/service_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package setting
     5  
     6  import (
     7  	"testing"
     8  
     9  	"code.gitea.io/gitea/modules/structs"
    10  
    11  	"github.com/gobwas/glob"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestLoadServices(t *testing.T) {
    16  	oldService := Service
    17  	defer func() {
    18  		Service = oldService
    19  	}()
    20  
    21  	cfg, err := NewConfigProviderFromData(`
    22  [service]
    23  EMAIL_DOMAIN_WHITELIST = d1, *.w
    24  EMAIL_DOMAIN_ALLOWLIST = d2, *.a
    25  EMAIL_DOMAIN_BLOCKLIST = d3, *.b
    26  `)
    27  	assert.NoError(t, err)
    28  	loadServiceFrom(cfg)
    29  
    30  	match := func(globs []glob.Glob, s string) bool {
    31  		for _, g := range globs {
    32  			if g.Match(s) {
    33  				return true
    34  			}
    35  		}
    36  		return false
    37  	}
    38  
    39  	assert.True(t, match(Service.EmailDomainAllowList, "d1"))
    40  	assert.True(t, match(Service.EmailDomainAllowList, "foo.w"))
    41  	assert.True(t, match(Service.EmailDomainAllowList, "d2"))
    42  	assert.True(t, match(Service.EmailDomainAllowList, "foo.a"))
    43  	assert.False(t, match(Service.EmailDomainAllowList, "d3"))
    44  
    45  	assert.True(t, match(Service.EmailDomainBlockList, "d3"))
    46  	assert.True(t, match(Service.EmailDomainBlockList, "foo.b"))
    47  	assert.False(t, match(Service.EmailDomainBlockList, "d1"))
    48  }
    49  
    50  func TestLoadServiceVisibilityModes(t *testing.T) {
    51  	oldService := Service
    52  	defer func() {
    53  		Service = oldService
    54  	}()
    55  
    56  	kases := map[string]func(){
    57  		`
    58  [service]
    59  DEFAULT_USER_VISIBILITY = public
    60  ALLOWED_USER_VISIBILITY_MODES = public,limited,private
    61  `: func() {
    62  			assert.Equal(t, "public", Service.DefaultUserVisibility)
    63  			assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
    64  			assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
    65  		},
    66  		`
    67  		[service]
    68  		DEFAULT_USER_VISIBILITY = public
    69  		`: func() {
    70  			assert.Equal(t, "public", Service.DefaultUserVisibility)
    71  			assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
    72  			assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
    73  		},
    74  		`
    75  		[service]
    76  		DEFAULT_USER_VISIBILITY = limited
    77  		`: func() {
    78  			assert.Equal(t, "limited", Service.DefaultUserVisibility)
    79  			assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
    80  			assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
    81  		},
    82  		`
    83  [service]
    84  ALLOWED_USER_VISIBILITY_MODES = public,limited,private
    85  `: func() {
    86  			assert.Equal(t, "public", Service.DefaultUserVisibility)
    87  			assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
    88  			assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
    89  		},
    90  		`
    91  [service]
    92  DEFAULT_USER_VISIBILITY = public
    93  ALLOWED_USER_VISIBILITY_MODES = limited,private
    94  `: func() {
    95  			assert.Equal(t, "limited", Service.DefaultUserVisibility)
    96  			assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
    97  			assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
    98  		},
    99  		`
   100  [service]
   101  DEFAULT_USER_VISIBILITY = my_type
   102  ALLOWED_USER_VISIBILITY_MODES = limited,private
   103  `: func() {
   104  			assert.Equal(t, "limited", Service.DefaultUserVisibility)
   105  			assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
   106  			assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
   107  		},
   108  		`
   109  [service]
   110  DEFAULT_USER_VISIBILITY = public
   111  ALLOWED_USER_VISIBILITY_MODES = public, limit, privated
   112  `: func() {
   113  			assert.Equal(t, "public", Service.DefaultUserVisibility)
   114  			assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
   115  			assert.Equal(t, []string{"public"}, Service.AllowedUserVisibilityModes)
   116  		},
   117  	}
   118  
   119  	for kase, fun := range kases {
   120  		t.Run(kase, func(t *testing.T) {
   121  			cfg, err := NewConfigProviderFromData(kase)
   122  			assert.NoError(t, err)
   123  			loadServiceFrom(cfg)
   124  			fun()
   125  			// reset
   126  			Service.AllowedUserVisibilityModesSlice = []bool{true, true, true}
   127  			Service.AllowedUserVisibilityModes = []string{}
   128  			Service.DefaultUserVisibility = ""
   129  			Service.DefaultUserVisibilityMode = structs.VisibleTypePublic
   130  		})
   131  	}
   132  }