code.gitea.io/gitea@v1.19.3/modules/doctor/fix16961_test.go (about)

     1  // Copyright 2021 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package doctor
     5  
     6  import (
     7  	"testing"
     8  
     9  	repo_model "code.gitea.io/gitea/models/repo"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func Test_fixUnitConfig_16961(t *testing.T) {
    15  	tests := []struct {
    16  		name      string
    17  		bs        string
    18  		wantFixed bool
    19  		wantErr   bool
    20  	}{
    21  		{
    22  			name:      "empty",
    23  			bs:        "",
    24  			wantFixed: true,
    25  			wantErr:   false,
    26  		},
    27  		{
    28  			name:      "normal: {}",
    29  			bs:        "{}",
    30  			wantFixed: false,
    31  			wantErr:   false,
    32  		},
    33  		{
    34  			name:      "broken but fixable: &{}",
    35  			bs:        "&{}",
    36  			wantFixed: true,
    37  			wantErr:   false,
    38  		},
    39  		{
    40  			name:      "broken but unfixable: &{asdasd}",
    41  			bs:        "&{asdasd}",
    42  			wantFixed: false,
    43  			wantErr:   true,
    44  		},
    45  	}
    46  	for _, tt := range tests {
    47  		t.Run(tt.name, func(t *testing.T) {
    48  			gotFixed, err := fixUnitConfig16961([]byte(tt.bs), &repo_model.UnitConfig{})
    49  			if (err != nil) != tt.wantErr {
    50  				t.Errorf("fixUnitConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
    51  				return
    52  			}
    53  			if gotFixed != tt.wantFixed {
    54  				t.Errorf("fixUnitConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
    55  			}
    56  		})
    57  	}
    58  }
    59  
    60  func Test_fixExternalWikiConfig_16961(t *testing.T) {
    61  	tests := []struct {
    62  		name      string
    63  		bs        string
    64  		expected  string
    65  		wantFixed bool
    66  		wantErr   bool
    67  	}{
    68  		{
    69  			name:      "normal: {\"ExternalWikiURL\":\"http://someurl\"}",
    70  			bs:        "{\"ExternalWikiURL\":\"http://someurl\"}",
    71  			expected:  "http://someurl",
    72  			wantFixed: false,
    73  			wantErr:   false,
    74  		},
    75  		{
    76  			name:      "broken: &{http://someurl}",
    77  			bs:        "&{http://someurl}",
    78  			expected:  "http://someurl",
    79  			wantFixed: true,
    80  			wantErr:   false,
    81  		},
    82  		{
    83  			name:      "broken but unfixable: http://someurl",
    84  			bs:        "http://someurl",
    85  			wantFixed: false,
    86  			wantErr:   true,
    87  		},
    88  	}
    89  	for _, tt := range tests {
    90  		t.Run(tt.name, func(t *testing.T) {
    91  			cfg := &repo_model.ExternalWikiConfig{}
    92  			gotFixed, err := fixExternalWikiConfig16961([]byte(tt.bs), cfg)
    93  			if (err != nil) != tt.wantErr {
    94  				t.Errorf("fixExternalWikiConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
    95  				return
    96  			}
    97  			if gotFixed != tt.wantFixed {
    98  				t.Errorf("fixExternalWikiConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
    99  			}
   100  			if cfg.ExternalWikiURL != tt.expected {
   101  				t.Errorf("fixExternalWikiConfig_16961().ExternalWikiURL = %v, want %v", cfg.ExternalWikiURL, tt.expected)
   102  			}
   103  		})
   104  	}
   105  }
   106  
   107  func Test_fixExternalTrackerConfig_16961(t *testing.T) {
   108  	tests := []struct {
   109  		name      string
   110  		bs        string
   111  		expected  repo_model.ExternalTrackerConfig
   112  		wantFixed bool
   113  		wantErr   bool
   114  	}{
   115  		{
   116  			name: "normal",
   117  			bs:   `{"ExternalTrackerURL":"a","ExternalTrackerFormat":"b","ExternalTrackerStyle":"c"}`,
   118  			expected: repo_model.ExternalTrackerConfig{
   119  				ExternalTrackerURL:    "a",
   120  				ExternalTrackerFormat: "b",
   121  				ExternalTrackerStyle:  "c",
   122  			},
   123  			wantFixed: false,
   124  			wantErr:   false,
   125  		},
   126  		{
   127  			name: "broken",
   128  			bs:   "&{a b c}",
   129  			expected: repo_model.ExternalTrackerConfig{
   130  				ExternalTrackerURL:    "a",
   131  				ExternalTrackerFormat: "b",
   132  				ExternalTrackerStyle:  "c",
   133  			},
   134  			wantFixed: true,
   135  			wantErr:   false,
   136  		},
   137  		{
   138  			name:      "broken - too many fields",
   139  			bs:        "&{a b c d}",
   140  			wantFixed: false,
   141  			wantErr:   true,
   142  		},
   143  		{
   144  			name:      "broken - wrong format",
   145  			bs:        "a b c d}",
   146  			wantFixed: false,
   147  			wantErr:   true,
   148  		},
   149  	}
   150  	for _, tt := range tests {
   151  		t.Run(tt.name, func(t *testing.T) {
   152  			cfg := &repo_model.ExternalTrackerConfig{}
   153  			gotFixed, err := fixExternalTrackerConfig16961([]byte(tt.bs), cfg)
   154  			if (err != nil) != tt.wantErr {
   155  				t.Errorf("fixExternalTrackerConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
   156  				return
   157  			}
   158  			if gotFixed != tt.wantFixed {
   159  				t.Errorf("fixExternalTrackerConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
   160  			}
   161  			if cfg.ExternalTrackerFormat != tt.expected.ExternalTrackerFormat {
   162  				t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerFormat = %v, want %v", tt.expected.ExternalTrackerFormat, cfg.ExternalTrackerFormat)
   163  			}
   164  			if cfg.ExternalTrackerStyle != tt.expected.ExternalTrackerStyle {
   165  				t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerStyle = %v, want %v", tt.expected.ExternalTrackerStyle, cfg.ExternalTrackerStyle)
   166  			}
   167  			if cfg.ExternalTrackerURL != tt.expected.ExternalTrackerURL {
   168  				t.Errorf("fixExternalTrackerConfig_16961().ExternalTrackerURL = %v, want %v", tt.expected.ExternalTrackerURL, cfg.ExternalTrackerURL)
   169  			}
   170  		})
   171  	}
   172  }
   173  
   174  func Test_fixPullRequestsConfig_16961(t *testing.T) {
   175  	tests := []struct {
   176  		name      string
   177  		bs        string
   178  		expected  repo_model.PullRequestsConfig
   179  		wantFixed bool
   180  		wantErr   bool
   181  	}{
   182  		{
   183  			name: "normal",
   184  			bs:   `{"IgnoreWhitespaceConflicts":false,"AllowMerge":false,"AllowRebase":false,"AllowRebaseMerge":false,"AllowSquash":false,"AllowManualMerge":false,"AutodetectManualMerge":false,"DefaultDeleteBranchAfterMerge":false,"DefaultMergeStyle":""}`,
   185  		},
   186  		{
   187  			name: "broken - 1.14",
   188  			bs:   `&{%!s(bool=false) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=false) %!s(bool=false)}`,
   189  			expected: repo_model.PullRequestsConfig{
   190  				IgnoreWhitespaceConflicts: false,
   191  				AllowMerge:                true,
   192  				AllowRebase:               true,
   193  				AllowRebaseMerge:          true,
   194  				AllowSquash:               true,
   195  				AllowManualMerge:          false,
   196  				AutodetectManualMerge:     false,
   197  			},
   198  			wantFixed: true,
   199  		},
   200  		{
   201  			name: "broken - 1.15",
   202  			bs:   `&{%!s(bool=false) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=true) %!s(bool=false) %!s(bool=false) %!s(bool=false) merge}`,
   203  			expected: repo_model.PullRequestsConfig{
   204  				AllowMerge:        true,
   205  				AllowRebase:       true,
   206  				AllowRebaseMerge:  true,
   207  				AllowSquash:       true,
   208  				DefaultMergeStyle: repo_model.MergeStyleMerge,
   209  			},
   210  			wantFixed: true,
   211  		},
   212  	}
   213  	for _, tt := range tests {
   214  		t.Run(tt.name, func(t *testing.T) {
   215  			cfg := &repo_model.PullRequestsConfig{}
   216  			gotFixed, err := fixPullRequestsConfig16961([]byte(tt.bs), cfg)
   217  			if (err != nil) != tt.wantErr {
   218  				t.Errorf("fixPullRequestsConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
   219  				return
   220  			}
   221  			if gotFixed != tt.wantFixed {
   222  				t.Errorf("fixPullRequestsConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
   223  			}
   224  			assert.EqualValues(t, &tt.expected, cfg)
   225  		})
   226  	}
   227  }
   228  
   229  func Test_fixIssuesConfig_16961(t *testing.T) {
   230  	tests := []struct {
   231  		name      string
   232  		bs        string
   233  		expected  repo_model.IssuesConfig
   234  		wantFixed bool
   235  		wantErr   bool
   236  	}{
   237  		{
   238  			name: "normal",
   239  			bs:   `{"EnableTimetracker":true,"AllowOnlyContributorsToTrackTime":true,"EnableDependencies":true}`,
   240  			expected: repo_model.IssuesConfig{
   241  				EnableTimetracker:                true,
   242  				AllowOnlyContributorsToTrackTime: true,
   243  				EnableDependencies:               true,
   244  			},
   245  		},
   246  		{
   247  			name: "broken",
   248  			bs:   `&{%!s(bool=true) %!s(bool=true) %!s(bool=true)}`,
   249  			expected: repo_model.IssuesConfig{
   250  				EnableTimetracker:                true,
   251  				AllowOnlyContributorsToTrackTime: true,
   252  				EnableDependencies:               true,
   253  			},
   254  			wantFixed: true,
   255  		},
   256  	}
   257  	for _, tt := range tests {
   258  		t.Run(tt.name, func(t *testing.T) {
   259  			cfg := &repo_model.IssuesConfig{}
   260  			gotFixed, err := fixIssuesConfig16961([]byte(tt.bs), cfg)
   261  			if (err != nil) != tt.wantErr {
   262  				t.Errorf("fixIssuesConfig_16961() error = %v, wantErr %v", err, tt.wantErr)
   263  				return
   264  			}
   265  			if gotFixed != tt.wantFixed {
   266  				t.Errorf("fixIssuesConfig_16961() = %v, want %v", gotFixed, tt.wantFixed)
   267  			}
   268  			assert.EqualValues(t, &tt.expected, cfg)
   269  		})
   270  	}
   271  }