From 62a1322cf9940daa987ca16053f5081d7da54298 Mon Sep 17 00:00:00 2001
From: guillep2k <18600385+guillep2k@users.noreply.github.com>
Date: Sat, 15 Feb 2020 01:29:06 -0300
Subject: [PATCH] Fix "access" fixtures and tests (#10247)

* Add fixture gen tool and fix "access" test

* Close file before exiting

* Add missing repo_unit for repo id: 5

* Fix count on TestAPIOrgRepos

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
---
 integrations/api_repo_test.go     |   2 +-
 models/access_test.go             |   2 +-
 models/fixture_access_test.go     |  52 +++++++++++++
 models/fixtures/access.yml        | 121 +++++++++++++++++++-----------
 models/fixtures/collaboration.yml |  24 ++++++
 models/fixtures/repo_unit.yml     |  37 ++++++++-
 6 files changed, 193 insertions(+), 45 deletions(-)
 create mode 100644 models/fixture_access_test.go

diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go
index 715fc629aa..ff59fac5cb 100644
--- a/integrations/api_repo_test.go
+++ b/integrations/api_repo_test.go
@@ -231,7 +231,7 @@ func TestAPIOrgRepos(t *testing.T) {
 		includesPrivate bool
 	}{
 		nil:   {count: 1},
-		user:  {count: 2, includesPrivate: true},
+		user:  {count: 3, includesPrivate: true},
 		user2: {count: 3, includesPrivate: true},
 		user3: {count: 1},
 	}
diff --git a/models/access_test.go b/models/access_test.go
index 103fe3a688..c134ab98d8 100644
--- a/models/access_test.go
+++ b/models/access_test.go
@@ -112,7 +112,7 @@ func TestUser_GetAccessibleRepositories(t *testing.T) {
 	user2 := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
 	repos, err = user2.GetAccessibleRepositories(0)
 	assert.NoError(t, err)
-	assert.Len(t, repos, 1)
+	assert.Len(t, repos, 4)
 
 	user29 := AssertExistsAndLoadBean(t, &User{ID: 29}).(*User)
 	repos, err = user29.GetAccessibleRepositories(0)
diff --git a/models/fixture_access_test.go b/models/fixture_access_test.go
new file mode 100644
index 0000000000..9a50d24d7c
--- /dev/null
+++ b/models/fixture_access_test.go
@@ -0,0 +1,52 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+// +build access_fixtures
+
+package models
+
+// This file is excluded from build and tests, and is intended for assisting
+// in keeping access.yml in sync with the other .yml files.
+
+// To use it, do:
+// cd models
+// go test -tags "access_fixtures sqlite sqlite_unlock_notify" -run TestBuildAccessFixturesYaml
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestBuildAccessFixturesYaml(t *testing.T) {
+	assert.NoError(t, PrepareTestDatabase())
+
+	repos := make([]*Repository, 0, 50)
+	assert.NoError(t, x.Find(&repos))
+	for _, repo := range repos {
+		repo.MustOwner()
+		assert.NoError(t, repo.RecalculateAccesses())
+	}
+
+	f, err := os.Create("fixtures/access.yml")
+	assert.NoError(t, err)
+	w := bufio.NewWriter(f)
+
+	accesses := make([]*Access, 0, 200)
+	assert.NoError(t, x.OrderBy("user_id, repo_id").Find(&accesses))
+	for i, a := range accesses {
+		fmt.Fprintf(w, "-\n")
+		fmt.Fprintf(w, "  id: %d\n", i+1)
+		fmt.Fprintf(w, "  user_id: %d\n", a.UserID)
+		fmt.Fprintf(w, "  repo_id: %d\n", a.RepoID)
+		fmt.Fprintf(w, "  mode: %d\n", a.Mode)
+		fmt.Fprintf(w, "\n")
+	}
+
+	w.Flush()
+	f.Close()
+}
diff --git a/models/fixtures/access.yml b/models/fixtures/access.yml
index 811720c8e4..4027e5fe92 100644
--- a/models/fixtures/access.yml
+++ b/models/fixtures/access.yml
@@ -2,88 +2,125 @@
   id: 1
   user_id: 2
   repo_id: 3
-  mode: 2 # write
+  mode: 4
 
 -
   id: 2
-  user_id: 4
-  repo_id: 4
-  mode: 2 # write
+  user_id: 2
+  repo_id: 5
+  mode: 4
 
 -
   id: 3
-  user_id: 4
-  repo_id: 3
-  mode: 2 # write
+  user_id: 2
+  repo_id: 24
+  mode: 2
 
 -
   id: 4
-  user_id: 15
-  repo_id: 22
-  mode: 2 # write
+  user_id: 2
+  repo_id: 32
+  mode: 4
 
 -
   id: 5
-  user_id: 15
-  repo_id: 21
-  mode: 2 # write
+  user_id: 4
+  repo_id: 3
+  mode: 2
 
 -
   id: 6
-  user_id: 15
-  repo_id: 23
-  mode: 4 # owner
+  user_id: 4
+  repo_id: 4
+  mode: 2
 
 -
   id: 7
-  user_id: 15
-  repo_id: 24
-  mode: 4 # owner
+  user_id: 4
+  repo_id: 40
+  mode: 2
 
 -
   id: 8
-  user_id: 18
-  repo_id: 23
-  mode: 4 # owner
+  user_id: 15
+  repo_id: 21
+  mode: 2
 
 -
   id: 9
-  user_id: 18
-  repo_id: 24
-  mode: 4 # owner
+  user_id: 15
+  repo_id: 22
+  mode: 2
 
 -
   id: 10
-  user_id: 18
-  repo_id: 22
-  mode: 2 # write
+  user_id: 15
+  repo_id: 23
+  mode: 4
 
 -
   id: 11
-  user_id: 18
-  repo_id: 21
-  mode: 2 # write
+  user_id: 15
+  repo_id: 24
+  mode: 4
 
 -
   id: 12
-  user_id: 20
-  repo_id: 27
-  mode: 4 # owner
-  
+  user_id: 15
+  repo_id: 32
+  mode: 2
+
 -
   id: 13
-  user_id: 20
-  repo_id: 28
-  mode: 4 # owner
+  user_id: 18
+  repo_id: 21
+  mode: 2
 
 -
   id: 14
-  user_id: 29
-  repo_id: 4
-  mode: 2 # write (collaborator)
+  user_id: 18
+  repo_id: 22
+  mode: 2
 
 -
   id: 15
+  user_id: 18
+  repo_id: 23
+  mode: 4
+
+-
+  id: 16
+  user_id: 18
+  repo_id: 24
+  mode: 4
+
+-
+  id: 17
+  user_id: 20
+  repo_id: 24
+  mode: 1
+
+-
+  id: 18
+  user_id: 20
+  repo_id: 27
+  mode: 4
+
+-
+  id: 19
+  user_id: 20
+  repo_id: 28
+  mode: 4
+
+-
+  id: 20
+  user_id: 29
+  repo_id: 4
+  mode: 2
+
+-
+  id: 21
   user_id: 29
   repo_id: 24
-  mode: 1 # read
+  mode: 1
+
diff --git a/models/fixtures/collaboration.yml b/models/fixtures/collaboration.yml
index 82d46f38f0..ef77d22b24 100644
--- a/models/fixtures/collaboration.yml
+++ b/models/fixtures/collaboration.yml
@@ -21,3 +21,27 @@
   repo_id: 4
   user_id: 29
   mode: 2 # write
+
+-
+  id: 5
+  repo_id: 21
+  user_id: 15
+  mode: 2 # write
+
+-
+  id: 6
+  repo_id: 21
+  user_id: 18
+  mode: 2 # write
+
+-
+  id: 7
+  repo_id: 22
+  user_id: 15
+  mode: 2 # write
+
+-
+  id: 8
+  repo_id: 22
+  user_id: 18
+  mode: 2 # write
diff --git a/models/fixtures/repo_unit.yml b/models/fixtures/repo_unit.yml
index 5ced38b003..35b9b92b79 100644
--- a/models/fixtures/repo_unit.yml
+++ b/models/fixtures/repo_unit.yml
@@ -478,4 +478,39 @@
   repo_id: 2
   type: 2
   config: "{}"
-  created_unix: 946684810
\ No newline at end of file
+  created_unix: 946684810
+
+-
+  id: 70
+  repo_id: 5
+  type: 4
+  config: "{}"
+  created_unix: 946684810
+
+-
+  id: 71
+  repo_id: 5
+  type: 5
+  config: "{}"
+  created_unix: 946684810
+
+-
+  id: 72
+  repo_id: 5
+  type: 1
+  config: "{}"
+  created_unix: 946684810
+
+-
+  id: 73
+  repo_id: 5
+  type: 2
+  config: "{\"EnableTimetracker\":true,\"AllowOnlyContributorsToTrackTime\":true}"
+  created_unix: 946684810
+
+-
+  id: 74
+  repo_id: 5
+  type: 3
+  config: "{\"IgnoreWhitespaceConflicts\":false,\"AllowMerge\":true,\"AllowRebase\":true,\"AllowRebaseMerge\":true,\"AllowSquash\":true}"
+  created_unix: 946684810