Migrated lib/ to modules/, added test data and schema for each data type.
This commit is contained in:
		
							parent
							
								
									d0bebb2210
								
							
						
					
					
						commit
						5cb31275e5
					
				
					 102 changed files with 3601 additions and 453 deletions
				
			
		
							
								
								
									
										41
									
								
								src/go.mod
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								src/go.mod
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2,48 +2,46 @@ module gin-cpularp
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ./lib/database
 | 
			
		||||
replace example.com/database => ./modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ./lib/database/user
 | 
			
		||||
replace example.com/database/user => ./modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ./lib/database/character
 | 
			
		||||
replace example.com/database/character => ./modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ./lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ./modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ./lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ./modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ./lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ./modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ./lib/database/item
 | 
			
		||||
replace example.com/database/item => ./modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ./lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ./modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ./lib/database/person
 | 
			
		||||
replace example.com/database/person => ./modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ./lib/database/role
 | 
			
		||||
replace example.com/database/role => ./modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ./lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ./modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ./lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ./modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ./lib/database/group
 | 
			
		||||
replace example.com/database/group => ./modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ./lib/database/function
 | 
			
		||||
replace example.com/database/function => ./modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ./lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ./modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ./lib/config/server
 | 
			
		||||
replace example.com/config/server => ./modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ./lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ./modules/auth/discord
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ./lib/api
 | 
			
		||||
replace example.com/api => ./modules/api
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/api v0.0.0
 | 
			
		||||
	example.com/auth/discord v0.0.0
 | 
			
		||||
	example.com/database v0.0.0
 | 
			
		||||
	github.com/gin-contrib/cors v1.7.5
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +64,9 @@ require (
 | 
			
		|||
	github.com/bytedance/sonic/loader v0.2.4 // indirect
 | 
			
		||||
	github.com/cloudwego/base64x v0.1.5 // indirect
 | 
			
		||||
	github.com/gabriel-vasile/mimetype v1.4.8 // indirect
 | 
			
		||||
	github.com/gin-contrib/cors v1.7.5 // indirect
 | 
			
		||||
	github.com/gin-contrib/sse v1.0.0 // indirect
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0 // indirect
 | 
			
		||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
			
		||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
			
		||||
	github.com/go-playground/validator/v10 v10.26.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +76,6 @@ require (
 | 
			
		|||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
			
		||||
	github.com/json-iterator/go v1.1.12 // indirect
 | 
			
		||||
	github.com/klauspost/cpuid/v2 v2.2.10 // indirect
 | 
			
		||||
	github.com/kr/text v0.2.0 // indirect
 | 
			
		||||
	github.com/leodido/go-urn v1.4.0 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
			
		||||
	github.com/mattn/go-sqlite3 v1.14.22 // indirect
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,6 @@ github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFos
 | 
			
		|||
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
 | 
			
		||||
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 | 
			
		||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
 | 
			
		||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,48 +0,0 @@
 | 
			
		|||
module example.com/database/tier
 | 
			
		||||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../functiontag
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/function v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functionset v0.0.0
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // direct
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/bytedance/sonic v1.11.6 // indirect
 | 
			
		||||
	github.com/bytedance/sonic/loader v0.1.1 // indirect
 | 
			
		||||
	github.com/cloudwego/base64x v0.1.4 // indirect
 | 
			
		||||
	github.com/cloudwego/iasm v0.2.0 // indirect
 | 
			
		||||
	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
 | 
			
		||||
	github.com/gin-contrib/sse v0.1.0 // indirect
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0 // indirect
 | 
			
		||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
			
		||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
			
		||||
	github.com/go-playground/validator/v10 v10.20.0 // indirect
 | 
			
		||||
	github.com/goccy/go-json v0.10.2 // indirect
 | 
			
		||||
	github.com/jinzhu/inflection v1.0.0 // indirect
 | 
			
		||||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
			
		||||
	github.com/json-iterator/go v1.1.12 // indirect
 | 
			
		||||
	github.com/klauspost/cpuid/v2 v2.2.7 // indirect
 | 
			
		||||
	github.com/leodido/go-urn v1.4.0 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
			
		||||
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 | 
			
		||||
	github.com/modern-go/reflect2 v1.0.2 // indirect
 | 
			
		||||
	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
 | 
			
		||||
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
 | 
			
		||||
	github.com/ugorji/go/codec v1.2.12 // indirect
 | 
			
		||||
	golang.org/x/arch v0.8.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.23.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.25.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.20.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.15.0 // indirect
 | 
			
		||||
	google.golang.org/protobuf v1.34.1 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +120,10 @@ func Create(db *gorm.DB, params CustomizationParams) error {
 | 
			
		|||
	var err error
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var newTags []itemtag.ItemTag
 | 
			
		||||
	if len(params.Tags) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +164,10 @@ func Update(db *gorm.DB, params CustomizationParams) error {
 | 
			
		|||
	var err error
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var newTags []itemtag.ItemTag
 | 
			
		||||
	if len(params.Tags) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,9 +57,13 @@ func (function *Function) getAssociations(db *gorm.DB) {
 | 
			
		|||
	db.Model(&function).Association("Requirements").Find(&function.Requirements)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (function *Function) get(db *gorm.DB, inputFunction uint) {
 | 
			
		||||
	db.Where("id = ?", inputFunction).Take(&function)
 | 
			
		||||
func (function *Function) get(db *gorm.DB, inputFunction uint) error {
 | 
			
		||||
	result := db.Model(&Function{}).Where("id = ?", inputFunction).Take(&function)
 | 
			
		||||
	if result.Error != nil {
 | 
			
		||||
		return result.Error
 | 
			
		||||
	}
 | 
			
		||||
	function.getAssociations(db)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (function Function) update(db *gorm.DB) error {
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +112,10 @@ func Create(db *gorm.DB, params FunctionParams) error {
 | 
			
		|||
	}
 | 
			
		||||
	var newRequirements []Function
 | 
			
		||||
	if len(params.Requirements) > 0 {
 | 
			
		||||
		newRequirements = *Get(db, params.Requirements)
 | 
			
		||||
		newRequirements, err = Get(db, params.Requirements)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return Function{
 | 
			
		||||
		Name:         params.Name,
 | 
			
		||||
| 
						 | 
				
			
			@ -117,17 +124,20 @@ func Create(db *gorm.DB, params FunctionParams) error {
 | 
			
		|||
	}.create(db)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Get(db *gorm.DB, inputFunctions []uint) *[]Function {
 | 
			
		||||
func Get(db *gorm.DB, inputFunctions []uint) ([]Function, error) {
 | 
			
		||||
	var outputFunctions []Function
 | 
			
		||||
	if len(inputFunctions) < 1 {
 | 
			
		||||
		db.Model(&Function{}).Select("id").Find(&inputFunctions)
 | 
			
		||||
	}
 | 
			
		||||
	for _, inputFunction := range inputFunctions {
 | 
			
		||||
		var outputFunction Function
 | 
			
		||||
		outputFunction.get(db, inputFunction)
 | 
			
		||||
		err := outputFunction.get(db, inputFunction)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		outputFunctions = append(outputFunctions, outputFunction)
 | 
			
		||||
	}
 | 
			
		||||
	return &outputFunctions
 | 
			
		||||
	return outputFunctions, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Update(db *gorm.DB, params FunctionParams) error {
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +151,10 @@ func Update(db *gorm.DB, params FunctionParams) error {
 | 
			
		|||
	}
 | 
			
		||||
	var newRequirements []Function
 | 
			
		||||
	if len(params.Requirements) > 0 {
 | 
			
		||||
		newRequirements = *Get(db, params.Requirements)
 | 
			
		||||
		newRequirements, err = Get(db, params.Requirements)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return Function{
 | 
			
		||||
		Model:        gorm.Model{ID: params.IDArray[0]},
 | 
			
		||||
| 
						 | 
				
			
			@ -173,17 +186,17 @@ func Delete(db *gorm.DB, inputFunctions []uint) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleRequest(method string, db *gorm.DB, IDUintArray *[]uint, body *[]byte) (*[]Function, error) {
 | 
			
		||||
func HandleRequest(method string, db *gorm.DB, IDUintArray *[]uint, body *[]byte) ([]Function, error) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var params FunctionParams
 | 
			
		||||
	err = params.parse(IDUintArray, body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var result *[]Function
 | 
			
		||||
	var result []Function
 | 
			
		||||
	switch method {
 | 
			
		||||
	case "GET":
 | 
			
		||||
		result = Get(db, params.IDArray)
 | 
			
		||||
		result, err = Get(db, params.IDArray)
 | 
			
		||||
	case "POST":
 | 
			
		||||
		err = Create(db, params)
 | 
			
		||||
	case "PUT":
 | 
			
		||||
| 
						 | 
				
			
			@ -46,9 +46,13 @@ func (functionSet *FunctionSet) getAssociations(db *gorm.DB) {
 | 
			
		|||
	db.Model(&functionSet).Association("Functions").Find(&functionSet.Functions)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (functionSet *FunctionSet) get(db *gorm.DB, inputFunctionSet uint) {
 | 
			
		||||
	db.Where("id = ?", inputFunctionSet).Take(&functionSet)
 | 
			
		||||
func (functionSet *FunctionSet) get(db *gorm.DB, inputFunctionSet uint) error {
 | 
			
		||||
	result := db.Model(&FunctionSet{}).Where("id = ?", inputFunctionSet).Take(&functionSet)
 | 
			
		||||
	if result.Error != nil {
 | 
			
		||||
		return result.Error
 | 
			
		||||
	}
 | 
			
		||||
	functionSet.getAssociations(db)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (functionSet FunctionSet) update(db *gorm.DB) error {
 | 
			
		||||
| 
						 | 
				
			
			@ -59,9 +63,9 @@ func (functionSet FunctionSet) update(db *gorm.DB) error {
 | 
			
		|||
		return result.Error
 | 
			
		||||
	}
 | 
			
		||||
	// Set the associated values by grabbing them from the database
 | 
			
		||||
	tagsError := db.Model(&originalFunctionSet).Association("Functions").Replace(&functionSet.Functions)
 | 
			
		||||
	if tagsError != nil {
 | 
			
		||||
		return tagsError
 | 
			
		||||
	functionsError := db.Model(&originalFunctionSet).Association("Functions").Replace(&functionSet.Functions)
 | 
			
		||||
	if functionsError != nil {
 | 
			
		||||
		return functionsError
 | 
			
		||||
	}
 | 
			
		||||
	db.Save(&originalFunctionSet)
 | 
			
		||||
	return nil
 | 
			
		||||
| 
						 | 
				
			
			@ -77,33 +81,45 @@ func (functionSet FunctionSet) delete(db *gorm.DB) error {
 | 
			
		|||
 | 
			
		||||
func Create(db *gorm.DB, params FunctionSetParams) error {
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	var err error
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return FunctionSet{
 | 
			
		||||
		Functions: newFunctions,
 | 
			
		||||
	}.create(db)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Get(db *gorm.DB, inputFunctionSets []uint) *[]FunctionSet {
 | 
			
		||||
func Get(db *gorm.DB, inputFunctionSets []uint) ([]FunctionSet, error) {
 | 
			
		||||
	var outputFunctionSets []FunctionSet
 | 
			
		||||
	if len(inputFunctionSets) < 1 {
 | 
			
		||||
		db.Model(&FunctionSet{}).Select("id").Find(&inputFunctionSets)
 | 
			
		||||
	}
 | 
			
		||||
	for _, inputFunctionSet := range inputFunctionSets {
 | 
			
		||||
		var outputFunctionSet FunctionSet
 | 
			
		||||
		outputFunctionSet.get(db, inputFunctionSet)
 | 
			
		||||
		err := outputFunctionSet.get(db, inputFunctionSet)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		outputFunctionSets = append(outputFunctionSets, outputFunctionSet)
 | 
			
		||||
	}
 | 
			
		||||
	return &outputFunctionSets
 | 
			
		||||
	return outputFunctionSets, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Update(db *gorm.DB, params FunctionSetParams) error {
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	var err error
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return FunctionSet{
 | 
			
		||||
		Model:     gorm.Model{ID: params.IDArray[0]},
 | 
			
		||||
		Functions: newFunctions,
 | 
			
		||||
	}.update(db)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -121,8 +137,8 @@ func Delete(db *gorm.DB, inputFunctionSets []uint) error {
 | 
			
		|||
		functionSet.get(db, inputFunctionSet)
 | 
			
		||||
		functionSets = append(functionSets, functionSet)
 | 
			
		||||
	}
 | 
			
		||||
	for _, function := range functionSets {
 | 
			
		||||
		err := function.delete(db)
 | 
			
		||||
	for _, functionSet := range functionSets {
 | 
			
		||||
		err := functionSet.delete(db)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -130,17 +146,17 @@ func Delete(db *gorm.DB, inputFunctionSets []uint) error {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HandleRequest(method string, db *gorm.DB, IDUintArray *[]uint, body *[]byte) (*[]FunctionSet, error) {
 | 
			
		||||
func HandleRequest(method string, db *gorm.DB, IDUintArray *[]uint, body *[]byte) ([]FunctionSet, error) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var params FunctionSetParams
 | 
			
		||||
	err = params.parse(IDUintArray, body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var result *[]FunctionSet
 | 
			
		||||
	var result []FunctionSet
 | 
			
		||||
	switch method {
 | 
			
		||||
	case "GET":
 | 
			
		||||
		result = Get(db, params.IDArray)
 | 
			
		||||
		result, err = Get(db, params.IDArray)
 | 
			
		||||
	case "POST":
 | 
			
		||||
		err = Create(db, params)
 | 
			
		||||
	case "PUT":
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,10 @@ func Create(db *gorm.DB, params ItemParams) error {
 | 
			
		|||
	var err error
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var newTags []itemtag.ItemTag
 | 
			
		||||
	if len(params.Tags) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +181,10 @@ func Update(db *gorm.DB, params ItemParams) error {
 | 
			
		|||
	var err error
 | 
			
		||||
	var newFunctions []function.Function
 | 
			
		||||
	if len(params.Functions) > 0 {
 | 
			
		||||
		newFunctions = *function.Get(db, params.Functions)
 | 
			
		||||
		newFunctions, err = function.Get(db, params.Functions)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var newTags []itemtag.ItemTag
 | 
			
		||||
	if len(params.Tags) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +126,10 @@ func Create(db *gorm.DB, params SchematicParams) error {
 | 
			
		|||
	}
 | 
			
		||||
	var newRequirements []function.Function
 | 
			
		||||
	if len(params.Requirements) > 0 {
 | 
			
		||||
		newRequirements = *function.Get(db, params.Requirements)
 | 
			
		||||
		newRequirements, err = function.Get(db, params.Requirements)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	resultArray := *inventoryslot.Get(db, []uint{params.Result})
 | 
			
		||||
	newResult := resultArray[0]
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +175,10 @@ func Update(db *gorm.DB, params SchematicParams) error {
 | 
			
		|||
	}
 | 
			
		||||
	var newRequirements []function.Function
 | 
			
		||||
	if len(params.Requirements) > 0 {
 | 
			
		||||
		newRequirements = *function.Get(db, params.Requirements)
 | 
			
		||||
		newRequirements, err = function.Get(db, params.Requirements)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	resultArray := *inventoryslot.Get(db, []uint{params.Result})
 | 
			
		||||
	newResult := resultArray[0]
 | 
			
		||||
							
								
								
									
										22
									
								
								src/modules/database/tier/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/modules/database/tier/go.mod
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
module example.com/database/tier
 | 
			
		||||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../functiontag
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/function v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functionset v0.0.0
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // direct
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/jinzhu/inflection v1.0.0 // indirect
 | 
			
		||||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
			
		||||
	golang.org/x/text v0.15.0 // indirect
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										8
									
								
								src/modules/database/tier/go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/modules/database/tier/go.sum
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 | 
			
		||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 | 
			
		||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
 | 
			
		||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 | 
			
		||||
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
 | 
			
		||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
			
		||||
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
 | 
			
		||||
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
 | 
			
		||||
| 
						 | 
				
			
			@ -77,8 +77,12 @@ func (tier Tier) delete(db *gorm.DB) error {
 | 
			
		|||
 | 
			
		||||
func Create(db *gorm.DB, params TierParams) error {
 | 
			
		||||
	var newFunctionSets []functionset.FunctionSet
 | 
			
		||||
	var err error
 | 
			
		||||
	if len(params.FunctionSets) > 0 {
 | 
			
		||||
		newFunctionSets = *functionset.Get(db, params.FunctionSets)
 | 
			
		||||
		newFunctionSets, err = functionset.Get(db, params.FunctionSets)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return Tier{
 | 
			
		||||
		FunctionSets: newFunctionSets,
 | 
			
		||||
| 
						 | 
				
			
			@ -100,8 +104,12 @@ func Get(db *gorm.DB, inputTiers []uint) *[]Tier {
 | 
			
		|||
 | 
			
		||||
func Update(db *gorm.DB, params TierParams) error {
 | 
			
		||||
	var newFunctionSets []functionset.FunctionSet
 | 
			
		||||
	var err error
 | 
			
		||||
	if len(params.FunctionSets) > 0 {
 | 
			
		||||
		newFunctionSets = *functionset.Get(db, params.FunctionSets)
 | 
			
		||||
		newFunctionSets, err = functionset.Get(db, params.FunctionSets)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return Tier{
 | 
			
		||||
		Model:        gorm.Model{ID: params.IDArray[0]},
 | 
			
		||||
| 
						 | 
				
			
			@ -1,96 +1,18 @@
 | 
			
		|||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	character "example.com/database/character"
 | 
			
		||||
	customization "example.com/database/customization"
 | 
			
		||||
	function "example.com/database/function"
 | 
			
		||||
	functionset "example.com/database/functionset"
 | 
			
		||||
	functiontag "example.com/database/functiontag"
 | 
			
		||||
	group "example.com/database/group"
 | 
			
		||||
	inventoryslot "example.com/database/inventoryslot"
 | 
			
		||||
	item "example.com/database/item"
 | 
			
		||||
	itemtag "example.com/database/itemtag"
 | 
			
		||||
	person "example.com/database/person"
 | 
			
		||||
	role "example.com/database/role"
 | 
			
		||||
	schematic "example.com/database/schematic"
 | 
			
		||||
	tier "example.com/database/tier"
 | 
			
		||||
	user "example.com/database/user"
 | 
			
		||||
	functionsettest "example.com/unit/functionsettest"
 | 
			
		||||
	functiontagtest "example.com/unit/functiontagtest"
 | 
			
		||||
	functiontest "example.com/unit/functiontest"
 | 
			
		||||
	grouptest "example.com/unit/grouptest"
 | 
			
		||||
	persontest "example.com/unit/persontest"
 | 
			
		||||
	tiertest "example.com/unit/tiertest"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type testCharacter struct {
 | 
			
		||||
	Result []character.Character `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testCustomization struct {
 | 
			
		||||
	Result []customization.Customization `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testFunction struct {
 | 
			
		||||
	Result []function.Function `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testFunctionSet struct {
 | 
			
		||||
	Result []functionset.FunctionSet `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testFunctionTag struct {
 | 
			
		||||
	Result []functiontag.FunctionTag `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testInventorySlot struct {
 | 
			
		||||
	Result []inventoryslot.InventorySlot `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testItem struct {
 | 
			
		||||
	Result []item.Item `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testItemTag struct {
 | 
			
		||||
	Result []itemtag.ItemTag `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testPerson struct {
 | 
			
		||||
	Result []person.Person `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testRole struct {
 | 
			
		||||
	Result []role.Role `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testSchematic struct {
 | 
			
		||||
	Result []schematic.Schematic `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testTier struct {
 | 
			
		||||
	Result []tier.Tier `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type testUser struct {
 | 
			
		||||
	Result []user.User `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type apiTestSuite struct {
 | 
			
		||||
	suite.Suite
 | 
			
		||||
	globalAuthHeader string
 | 
			
		||||
	router           *gin.Engine
 | 
			
		||||
	group            group.Group
 | 
			
		||||
	groupJSON        []byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *apiTestSuite) TearDownTestSuite() {
 | 
			
		||||
	os.Remove("db/main.db")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestSuite01Group(t *testing.T) {
 | 
			
		||||
	var groupSuite grouptest.GroupTestSuite
 | 
			
		||||
	groupSuite.SetupTestSuite()
 | 
			
		||||
| 
						 | 
				
			
			@ -118,3 +40,17 @@ func TestSuite04Function(t *testing.T) {
 | 
			
		|||
	suite.Run(t, &functionSuite)
 | 
			
		||||
	functionSuite.TearDownTestSuite()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestSuite05FunctionSet(t *testing.T) {
 | 
			
		||||
	var functionSetSuite functionsettest.FunctionSetTestSuite
 | 
			
		||||
	functionSetSuite.SetupTestSuite()
 | 
			
		||||
	suite.Run(t, &functionSetSuite)
 | 
			
		||||
	functionSetSuite.TearDownTestSuite()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestSuite06Tier(t *testing.T) {
 | 
			
		||||
	var tierSuite tiertest.TierTestSuite
 | 
			
		||||
	tierSuite.SetupTestSuite()
 | 
			
		||||
	suite.Run(t, &tierSuite)
 | 
			
		||||
	tierSuite.TearDownTestSuite()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										88
									
								
								test/fixtures/characters.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								test/fixtures/characters.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/character.schema.json",
 | 
			
		||||
  "characters": [
 | 
			
		||||
    {
 | 
			
		||||
      "function_sets": [],
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "inventory": [],
 | 
			
		||||
      "name": "test1",
 | 
			
		||||
      "owners": [],
 | 
			
		||||
      "roles": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "function_sets": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "functions": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "tags": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 2,
 | 
			
		||||
                  "name": "test2"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 3,
 | 
			
		||||
                  "name": "test3"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "test3",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 2,
 | 
			
		||||
                  "name": "test2",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1",
 | 
			
		||||
                      "tags": [],
 | 
			
		||||
                      "requirements": []
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "inventory": [],
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "owners": [],
 | 
			
		||||
      "roles": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "function_sets": [],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "inventory": [],
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "owners": [],
 | 
			
		||||
      "roles": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "character_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "function_sets": [],
 | 
			
		||||
    "inventory": [],
 | 
			
		||||
    "name": "another_test",
 | 
			
		||||
    "owners": [],
 | 
			
		||||
    "roles": []
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										142
									
								
								test/fixtures/customizations.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								test/fixtures/customizations.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,142 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/customization.schema.json",
 | 
			
		||||
  "customizations": [
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "This is some flavor text.",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1",
 | 
			
		||||
      "physrep_requirements": "Git gud",
 | 
			
		||||
      "rules_description": "Judge they're stacking",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
      "functions": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "physrep_requirements": "Do you lift",
 | 
			
		||||
      "rules_description": "Ur mom gay",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "Something else",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "physrep_requirements": "Out of dumb jokes",
 | 
			
		||||
      "rules_description": "Sorry",
 | 
			
		||||
      "tags": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "This is some flavor text.",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "physrep_requirements": "Git gud",
 | 
			
		||||
      "rules_description": "Judge they're stacking",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "customization_update": {
 | 
			
		||||
    "flavor_text": "",
 | 
			
		||||
    "functions": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2",
 | 
			
		||||
        "tags": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "",
 | 
			
		||||
    "physrep_requirements": "",
 | 
			
		||||
    "rules_description": "",
 | 
			
		||||
    "tags": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "visibility": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								test/fixtures/functions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								test/fixtures/functions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/function.schema.json",
 | 
			
		||||
  "functions": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "requirements": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "tags": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "requirements": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "requirements": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "function_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "another_test",
 | 
			
		||||
    "tags": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "requirements": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2",
 | 
			
		||||
        "tags": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								test/fixtures/functionset.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								test/fixtures/functionset.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/functionset.schema.json",
 | 
			
		||||
  "function_sets": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "functions": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "function_set_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "functions": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2",
 | 
			
		||||
        "tags": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "test2"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 3,
 | 
			
		||||
            "name": "test3"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "test2",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "test1",
 | 
			
		||||
                "tags": [],
 | 
			
		||||
                "requirements": []
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								test/fixtures/functiontags.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								test/fixtures/functiontags.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/functiontag.schema.json",
 | 
			
		||||
  "function_tags": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "function_tag_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "another_test"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								test/fixtures/groups.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								test/fixtures/groups.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/group.schema.json",
 | 
			
		||||
  "groups": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "group_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "another_test"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										280
									
								
								test/fixtures/inventoryslots.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										280
									
								
								test/fixtures/inventoryslots.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,280 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/inventoryslot.schema.json",
 | 
			
		||||
  "inventory_slots": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "item": {
 | 
			
		||||
        "customizations": [],
 | 
			
		||||
        "flavor_text": "Bronze currency",
 | 
			
		||||
        "functions": [],
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "Bronze",
 | 
			
		||||
        "physrep_requirements": "None",
 | 
			
		||||
        "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "visibility": []
 | 
			
		||||
      },
 | 
			
		||||
      "quantity": 1
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "item": {
 | 
			
		||||
        "customizations": [
 | 
			
		||||
          {
 | 
			
		||||
            "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
            "functions": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "test1",
 | 
			
		||||
                "tags": [],
 | 
			
		||||
                "requirements": []
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "id": 2,
 | 
			
		||||
                "name": "test2",
 | 
			
		||||
                "tags": [
 | 
			
		||||
                  {
 | 
			
		||||
                    "id": 1,
 | 
			
		||||
                    "name": "test1"
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                "requirements": []
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "id": 3,
 | 
			
		||||
                "name": "test3",
 | 
			
		||||
                "tags": [],
 | 
			
		||||
                "requirements": [
 | 
			
		||||
                  {
 | 
			
		||||
                    "id": 1,
 | 
			
		||||
                    "name": "test1",
 | 
			
		||||
                    "tags": [],
 | 
			
		||||
                    "requirements": []
 | 
			
		||||
                  }
 | 
			
		||||
                ]
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "test2",
 | 
			
		||||
            "physrep_requirements": "Do you lift",
 | 
			
		||||
            "rules_description": "Ur mom gay",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "visibility": []
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "flavor_text": "Silver currency",
 | 
			
		||||
        "functions": [],
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "Silver",
 | 
			
		||||
        "physrep_requirements": "None",
 | 
			
		||||
        "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "visibility": []
 | 
			
		||||
      },
 | 
			
		||||
      "quantity": 2
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "item": {
 | 
			
		||||
        "customizations": [],
 | 
			
		||||
        "flavor_text": "Gold currency",
 | 
			
		||||
        "functions": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "test2",
 | 
			
		||||
            "tags": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "test1"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "Gold",
 | 
			
		||||
        "physrep_requirements": "None",
 | 
			
		||||
        "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "visibility": []
 | 
			
		||||
      },
 | 
			
		||||
      "quantity": 3
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "inventory_slot_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "item": {
 | 
			
		||||
      "customizations": [
 | 
			
		||||
        {
 | 
			
		||||
          "flavor_text": "This is some flavor text.",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "physrep_requirements": "Git gud",
 | 
			
		||||
          "rules_description": "Judge they're stacking",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
          "functions": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "tags": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "test3",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "physrep_requirements": "Do you lift",
 | 
			
		||||
          "rules_description": "Ur mom gay",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "flavor_text": "Something else",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "physrep_requirements": "Out of dumb jokes",
 | 
			
		||||
          "rules_description": "Sorry",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "test3"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "flavor_text": "This is some flavor text.",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "physrep_requirements": "Git gud",
 | 
			
		||||
          "rules_description": "Judge they're stacking",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "test3"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "flavor_text": "Free Luigi",
 | 
			
		||||
      "functions": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "UBI",
 | 
			
		||||
      "physrep_requirements": "Socialism",
 | 
			
		||||
      "rules_description": "There is no ethical consumption under captialism",
 | 
			
		||||
      "tags": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "quantity": 50
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										280
									
								
								test/fixtures/items.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										280
									
								
								test/fixtures/items.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,280 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/item.schema.json",
 | 
			
		||||
  "items": [
 | 
			
		||||
    {
 | 
			
		||||
      "customizations": [],
 | 
			
		||||
      "flavor_text": "Bronze currency",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "Bronze",
 | 
			
		||||
      "physrep_requirements": "None",
 | 
			
		||||
      "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "customizations": [
 | 
			
		||||
        {
 | 
			
		||||
          "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
          "functions": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "tags": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "test3",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "physrep_requirements": "Do you lift",
 | 
			
		||||
          "rules_description": "Ur mom gay",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "flavor_text": "Silver currency",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "Silver",
 | 
			
		||||
      "physrep_requirements": "None",
 | 
			
		||||
      "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "customizations": [],
 | 
			
		||||
      "flavor_text": "Gold currency",
 | 
			
		||||
      "functions": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "Gold",
 | 
			
		||||
      "physrep_requirements": "None",
 | 
			
		||||
      "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "customizations": [],
 | 
			
		||||
      "flavor_text": "Platinum currency",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 4,
 | 
			
		||||
      "name": "Platinm",
 | 
			
		||||
      "physrep_requirements": "None",
 | 
			
		||||
      "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "item_update": {
 | 
			
		||||
    "customizations": [
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "This is some flavor text.",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1",
 | 
			
		||||
      "physrep_requirements": "Git gud",
 | 
			
		||||
      "rules_description": "Judge they're stacking",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
      "functions": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "physrep_requirements": "Do you lift",
 | 
			
		||||
      "rules_description": "Ur mom gay",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "Something else",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "physrep_requirements": "Out of dumb jokes",
 | 
			
		||||
      "rules_description": "Sorry",
 | 
			
		||||
      "tags": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "flavor_text": "This is some flavor text.",
 | 
			
		||||
      "functions": [],
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "physrep_requirements": "Git gud",
 | 
			
		||||
      "rules_description": "Judge they're stacking",
 | 
			
		||||
      "tags": [],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
    ],
 | 
			
		||||
    "flavor_text": "Free Luigi",
 | 
			
		||||
    "functions": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2",
 | 
			
		||||
        "tags": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "UBI",
 | 
			
		||||
    "physrep_requirements": "Socialism",
 | 
			
		||||
    "rules_description": "There is no ethical consumption under captialism",
 | 
			
		||||
    "tags": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "visibility": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								test/fixtures/itemtags.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								test/fixtures/itemtags.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/itemtag.schema.json",
 | 
			
		||||
  "item_tags": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "item_tag_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "another_test"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								test/fixtures/persons.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								test/fixtures/persons.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/person.schema.json",
 | 
			
		||||
  "persons": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "groups": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "groups": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 4,
 | 
			
		||||
      "name": "test4",
 | 
			
		||||
      "groups": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "person_update": {
 | 
			
		||||
    "id": 2,
 | 
			
		||||
    "name": "another_test",
 | 
			
		||||
    "groups": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										104
									
								
								test/fixtures/roles.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								test/fixtures/roles.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/role.schema.json",
 | 
			
		||||
  "roles": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "name": "test1",
 | 
			
		||||
      "tiers": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "name": "test2",
 | 
			
		||||
      "tiers": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "function_sets": []
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "name": "test3",
 | 
			
		||||
      "tiers": [],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "role_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "name": "another_test",
 | 
			
		||||
    "tiers": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "function_sets": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "function_sets": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "function1",
 | 
			
		||||
            "requirements": [],
 | 
			
		||||
            "tags": []
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "function2",
 | 
			
		||||
            "requirements": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "function1",
 | 
			
		||||
                "requirements": [],
 | 
			
		||||
                "tags": []
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "tags": []
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 3,
 | 
			
		||||
            "name": "function3",
 | 
			
		||||
            "requirements": [],
 | 
			
		||||
            "tags": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "tag1"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "id": 2,
 | 
			
		||||
                "name": "tag2"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "id": 3,
 | 
			
		||||
                "name": "tag3"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "visibility": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								test/fixtures/schemas/character.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								test/fixtures/schemas/character.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Character",
 | 
			
		||||
  "description": "Describes a list of characters",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "characters": {
 | 
			
		||||
      "description": "A list of characters",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A character object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this character",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "A name associated with this character",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "owners": {
 | 
			
		||||
            "description": "A list of persons that own this character",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./person.schema.json#/properties/persons/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "roles": {
 | 
			
		||||
            "description": "A list of roles associated with this character",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./role.schema.json#/properties/roles/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "function_sets": {
 | 
			
		||||
            "description": "A list of function sets associated with this character",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./functionset.schema.json#/properties/function_sets/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "inventory": {
 | 
			
		||||
            "description": "The inventory associated with this character (a list of inventory slot objects)",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./inventoryslot.schema.json#/properties/inventory_slots/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": [
 | 
			
		||||
          "id",
 | 
			
		||||
          "name",
 | 
			
		||||
          "owners",
 | 
			
		||||
          "roles",
 | 
			
		||||
          "function_sets",
 | 
			
		||||
          "inventory"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "character_update": {
 | 
			
		||||
      "$ref": "#/properties/characters/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["characters", "character_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								test/fixtures/schemas/customization.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								test/fixtures/schemas/customization.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Customization",
 | 
			
		||||
  "description": "Describes a list of customizations",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "customizations": {
 | 
			
		||||
      "description": "A list of customizations",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A customization object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this customization",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name associated with this customization",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "functions": {
 | 
			
		||||
            "description": "A list of functions associated with this customization",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "function.schema.json#/properties/functions/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "flavor_text": {
 | 
			
		||||
            "description": "Flavor text associated with this customization",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "rules_description": {
 | 
			
		||||
            "description": "Rules description associated with this customization",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "physrep_requirements": {
 | 
			
		||||
            "description": "The physrep requirements associated with this customization",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "tags": {
 | 
			
		||||
            "description": "A list of function tags associated with this customization",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "functiontag.schema.json#/properties/function_tags/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "visibility": {
 | 
			
		||||
            "description": "A list of groups associated with this customization",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "group.schema.json#/properties/groups/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": [
 | 
			
		||||
          "id",
 | 
			
		||||
          "name",
 | 
			
		||||
          "functions",
 | 
			
		||||
          "flavor_text",
 | 
			
		||||
          "rules_description",
 | 
			
		||||
          "physrep_requirements",
 | 
			
		||||
          "tags",
 | 
			
		||||
          "visibility"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "customization_update": {
 | 
			
		||||
      "$ref": "#/properties/customizations/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["customizations", "customization_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								test/fixtures/schemas/function.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								test/fixtures/schemas/function.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Function",
 | 
			
		||||
  "description": "Describes a function",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "functions": {
 | 
			
		||||
      "description": "A list of functions",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A function object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer representing the function tag id",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name for a specific function tag",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "tags": {
 | 
			
		||||
            "description": "A list of tags associated with this function",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "functiontag.schema.json#/properties/function_tags/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "requirements": {
 | 
			
		||||
            "description": "A list of functions required for this function",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "#/properties/functions/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "required": ["id", "name", "tags", "requirements"],
 | 
			
		||||
        "additionalProperties": false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "function_update": {
 | 
			
		||||
      "$ref": "#/properties/functions/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["functions", "function_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								test/fixtures/schemas/functionset.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								test/fixtures/schemas/functionset.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Function Set",
 | 
			
		||||
  "description": "Describes a set of functions",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "function_sets": {
 | 
			
		||||
      "description": "A list of function sets",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A function set object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer representing the function tag id",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "functions": {
 | 
			
		||||
            "description": "A list of functions associated with this set",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "function.schema.json#/properties/functions/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "required": ["id", "functions"],
 | 
			
		||||
        "additionalProperties": false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "function_set_update": {
 | 
			
		||||
      "$ref": "functionset.schema.json#/properties/function_sets/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["function_sets", "function_set_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								test/fixtures/schemas/functiontag.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								test/fixtures/schemas/functiontag.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Function Tag",
 | 
			
		||||
  "description": "Describes a tag that functions can be assigned for categorization",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "function_tags": {
 | 
			
		||||
      "description": "A list of function tags",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A function tag object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer representing the function tag id",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name for a specific function tag",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "required": ["id", "name"],
 | 
			
		||||
        "additionalProperties": false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "function_tag_update": {
 | 
			
		||||
      "$ref": "#/properties/function_tags/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["function_tags", "function_tag_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								test/fixtures/schemas/group.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								test/fixtures/schemas/group.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Group",
 | 
			
		||||
  "description": "Describes a group that users can be assigned to for access control",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "groups": {
 | 
			
		||||
      "description": "A list of groups",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A group object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer representing the group id",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name for a specific group",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "required": ["id", "name"],
 | 
			
		||||
        "additionalProperties": false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "group_update": {
 | 
			
		||||
      "$ref": "group.schema.json#/properties/groups/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["groups", "group_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								test/fixtures/schemas/inventoryslot.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								test/fixtures/schemas/inventoryslot.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Inventory Slot",
 | 
			
		||||
  "description": "Describes a list of inventory slots",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "inventory_slots": {
 | 
			
		||||
      "description": "A list of inventory slots",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A inventory slot object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this customization",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "item": {
 | 
			
		||||
            "$ref": "./item.schema.json#/properties/items/items"
 | 
			
		||||
          },
 | 
			
		||||
          "quantity": {
 | 
			
		||||
            "description": "How much of this item",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": ["id", "item", "quantity"]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "inventory_slot_update": {
 | 
			
		||||
      "$ref": "#/properties/inventory_slots/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["inventory_slots", "inventory_slot_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										81
									
								
								test/fixtures/schemas/item.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								test/fixtures/schemas/item.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,81 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Item",
 | 
			
		||||
  "description": "Describes a list of items",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "items": {
 | 
			
		||||
      "description": "A list of items",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A item object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this item",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name associated with this item",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "functions": {
 | 
			
		||||
            "description": "A list of functions associated with this item",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "function.schema.json#/properties/functions/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "flavor_text": {
 | 
			
		||||
            "description": "Flavor text associated with this item",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "rules_description": {
 | 
			
		||||
            "description": "A rules description associated with this item",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "physrep_requirements": {
 | 
			
		||||
            "description": "The physrep requirements associated with this item",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "tags": {
 | 
			
		||||
            "description": "A list of function tags associated with this item",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "functiontag.schema.json#/properties/function_tags/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "customizations": {
 | 
			
		||||
            "description": "A list of customizations associated with this item",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "customization.schema.json#/properties/customizations/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "visibility": {
 | 
			
		||||
            "description": "A list of groups attributed to this item",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "group.schema.json#/properties/groups/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": [
 | 
			
		||||
          "id",
 | 
			
		||||
          "name",
 | 
			
		||||
          "functions",
 | 
			
		||||
          "flavor_text",
 | 
			
		||||
          "rules_description",
 | 
			
		||||
          "physrep_requirements",
 | 
			
		||||
          "tags",
 | 
			
		||||
          "customizations",
 | 
			
		||||
          "visibility"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "item_update": {
 | 
			
		||||
      "$ref": "#/properties/items/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["items", "item_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								test/fixtures/schemas/itemtag.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								test/fixtures/schemas/itemtag.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Item Tag",
 | 
			
		||||
  "description": "Describes a list of item tags",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "item_tags": {
 | 
			
		||||
      "description": "A list of item tags",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A item tag object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this item tag",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "A name associated with this item tag",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": ["id", "name"]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "item_tag_update": {
 | 
			
		||||
      "$ref": "#/properties/item_tags/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["item_tags", "item_tag_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								test/fixtures/schemas/person.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								test/fixtures/schemas/person.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Person",
 | 
			
		||||
  "description": "Describes a set of persons",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "persons": {
 | 
			
		||||
      "description": "A list of persons",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A person object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer representing the function tag id",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "The name associated with this person",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "groups": {
 | 
			
		||||
            "description": "A list of groups attributed to this person",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "group.schema.json#/properties/groups/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "required": ["id", "name", "groups"],
 | 
			
		||||
        "additionalProperties": false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "person_update": {
 | 
			
		||||
      "$ref": "#/properties/persons/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["persons", "person_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								test/fixtures/schemas/role.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								test/fixtures/schemas/role.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Role",
 | 
			
		||||
  "description": "Describes a list of roles",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "roles": {
 | 
			
		||||
      "description": "A list of roles",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A role object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this item tag",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "A name associated with this item tag",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "tiers": {
 | 
			
		||||
            "description": "A list of tiers associated with this role",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./tier.schema.json#/properties/tiers/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "visibility": {
 | 
			
		||||
            "description": "A list of groups associated with this role",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./group.schema.json#/properties/groups/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": ["id", "name", "tiers", "visibility"]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "role_update": {
 | 
			
		||||
      "$ref": "#/properties/roles/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["roles", "role_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								test/fixtures/schemas/schematic.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								test/fixtures/schemas/schematic.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Schematic",
 | 
			
		||||
  "description": "Describes a list of schematics",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "schematics": {
 | 
			
		||||
      "description": "A list of schematics",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A schematic object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "An integer id associated with this schematic",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "material": {
 | 
			
		||||
            "description": "A list of materials associated with this schematic",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./inventoryslot.schema.json#/properties/inventory_slots/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "tools": {
 | 
			
		||||
            "description": "A list of tools associated with this schematic",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./inventoryslot.schema.json#/properties/inventory_slots/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "requirements": {
 | 
			
		||||
            "description": "A list of requirements for this schematic",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./function.schema.json#/properties/functions/items"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "time_units": {
 | 
			
		||||
            "description": "An amount of time units attributed to this schematic",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "result": {
 | 
			
		||||
            "$ref": "./inventoryslot.schema.json#/properties/inventory_slots/items"
 | 
			
		||||
          },
 | 
			
		||||
          "visibility": {
 | 
			
		||||
            "description": "A list of groups attributed to this schematic",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "$ref": "./group.schema.json#/properties/groups/items"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": [
 | 
			
		||||
          "id",
 | 
			
		||||
          "material",
 | 
			
		||||
          "tools",
 | 
			
		||||
          "requirements",
 | 
			
		||||
          "time_units",
 | 
			
		||||
          "result",
 | 
			
		||||
          "visibility"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "schematic_update": {
 | 
			
		||||
      "$ref": "#/properties/schematics/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["schematics", "schematic_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								test/fixtures/schemas/tier.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								test/fixtures/schemas/tier.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "Tier",
 | 
			
		||||
  "description": "Describes a list of function sets",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "tiers": {
 | 
			
		||||
      "description": "A list of tiers",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "A tier object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "id": {
 | 
			
		||||
            "description": "Integer denoting the specific tier",
 | 
			
		||||
            "type": "integer"
 | 
			
		||||
          },
 | 
			
		||||
          "function_sets": {
 | 
			
		||||
            "description": "A list of function sets held by this tier",
 | 
			
		||||
            "type": "array",
 | 
			
		||||
            "items": {
 | 
			
		||||
              "type": "object",
 | 
			
		||||
              "properties": {
 | 
			
		||||
                "id": {
 | 
			
		||||
                  "description": "Integer denoting the specific function",
 | 
			
		||||
                  "type": "integer"
 | 
			
		||||
                },
 | 
			
		||||
                "name": {
 | 
			
		||||
                  "description": "The name of this function",
 | 
			
		||||
                  "type": "string"
 | 
			
		||||
                },
 | 
			
		||||
                "tags": {
 | 
			
		||||
                  "description": "Function tags associated with this function",
 | 
			
		||||
                  "type": "array",
 | 
			
		||||
                  "items": {
 | 
			
		||||
                    "type": "object",
 | 
			
		||||
                    "properties": {
 | 
			
		||||
                      "id": {
 | 
			
		||||
                        "description": "Integer denoting the specific function tag",
 | 
			
		||||
                        "type": "integer"
 | 
			
		||||
                      },
 | 
			
		||||
                      "name": {
 | 
			
		||||
                        "description": "The name of this function tag",
 | 
			
		||||
                        "type": "string"
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                "requirements": {
 | 
			
		||||
                  "description": "Functions required by this function",
 | 
			
		||||
                  "type": "array",
 | 
			
		||||
                  "items": {
 | 
			
		||||
                    "$ref": "tier.schema.json#/properties/tiers/items/properties/function_sets/items"
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "required": ["id", "name", "tags", "requirements"]
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": ["id", "function_sets"]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tier_update": {
 | 
			
		||||
      "$ref": "tier.schema.json#/properties/tiers/items"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "required": ["tiers", "tier_update"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								test/fixtures/schemas/user.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								test/fixtures/schemas/user.schema.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
{
 | 
			
		||||
  "title": "User",
 | 
			
		||||
  "description": "Describes a user object",
 | 
			
		||||
  "type": "object",
 | 
			
		||||
  "properties": {
 | 
			
		||||
    "id": {
 | 
			
		||||
      "description": "Integer denoting the specific tier",
 | 
			
		||||
      "type": "integer"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "$ref": "./person.schema.json#/properties/persons/items"
 | 
			
		||||
    },
 | 
			
		||||
    "display_name": {
 | 
			
		||||
      "description": "The display name associated with this user",
 | 
			
		||||
      "type": "string"
 | 
			
		||||
    },
 | 
			
		||||
    "user_name": {
 | 
			
		||||
      "description": "The internal user name associated with this user",
 | 
			
		||||
      "type": "string"
 | 
			
		||||
    },
 | 
			
		||||
    "avatar": {
 | 
			
		||||
      "description": "An avatar associated with this user",
 | 
			
		||||
      "type": "string"
 | 
			
		||||
    },
 | 
			
		||||
    "avatar_decoration": {
 | 
			
		||||
      "description": "An avatar decoration associated with this user",
 | 
			
		||||
      "type": "string"
 | 
			
		||||
    },
 | 
			
		||||
    "login_token": {
 | 
			
		||||
      "description": "The login token associated with this user",
 | 
			
		||||
      "type": "string"
 | 
			
		||||
    },
 | 
			
		||||
    "logged_in": {
 | 
			
		||||
      "description": "Whether a user is currently logged in or not",
 | 
			
		||||
      "type": "boolean"
 | 
			
		||||
    },
 | 
			
		||||
    "api_keys": {
 | 
			
		||||
      "description": "A list of api keys this user has generated",
 | 
			
		||||
      "type": "array",
 | 
			
		||||
      "items": {
 | 
			
		||||
        "description": "An api key object",
 | 
			
		||||
        "type": "object",
 | 
			
		||||
        "properties": {
 | 
			
		||||
          "name": {
 | 
			
		||||
            "description": "A name associated with this api key",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          "secret": {
 | 
			
		||||
            "description": "The secret for this api key",
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "additionalProperties": false,
 | 
			
		||||
        "required": ["name", "secret"]
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "additionalProperties": false,
 | 
			
		||||
  "required": [
 | 
			
		||||
    "id",
 | 
			
		||||
    "person",
 | 
			
		||||
    "display_name",
 | 
			
		||||
    "user_name",
 | 
			
		||||
    "avatar",
 | 
			
		||||
    "avatar_decoration",
 | 
			
		||||
    "login_token",
 | 
			
		||||
    "logged_in",
 | 
			
		||||
    "api_keys"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										459
									
								
								test/fixtures/schematics.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										459
									
								
								test/fixtures/schematics.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,459 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/schematic.schema.json",
 | 
			
		||||
  "schematics": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "material": [],
 | 
			
		||||
      "requirements": [],
 | 
			
		||||
      "result": {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [],
 | 
			
		||||
          "flavor_text": "Bronze currency",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "Bronze",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 1
 | 
			
		||||
      },
 | 
			
		||||
      "time_units": 10,
 | 
			
		||||
      "tools": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "material": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "item": {
 | 
			
		||||
            "customizations": [],
 | 
			
		||||
            "flavor_text": "Bronze currency",
 | 
			
		||||
            "functions": [],
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "Bronze",
 | 
			
		||||
            "physrep_requirements": "None",
 | 
			
		||||
            "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "visibility": []
 | 
			
		||||
          },
 | 
			
		||||
          "quantity": 1
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "requirements": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2",
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "requirements": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "requirements": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "result": {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [
 | 
			
		||||
            {
 | 
			
		||||
              "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
              "functions": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 2,
 | 
			
		||||
                  "name": "test2",
 | 
			
		||||
                  "tags": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1"
 | 
			
		||||
                    }
 | 
			
		||||
                  ],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 3,
 | 
			
		||||
                  "name": "test3",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1",
 | 
			
		||||
                      "tags": [],
 | 
			
		||||
                      "requirements": []
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "physrep_requirements": "Do you lift",
 | 
			
		||||
              "rules_description": "Ur mom gay",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "visibility": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "flavor_text": "Silver currency",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "Silver",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 2
 | 
			
		||||
      },
 | 
			
		||||
      "time_units": 20,
 | 
			
		||||
      "tools": [],
 | 
			
		||||
      "visibility": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "material": [],
 | 
			
		||||
      "requirements": [],
 | 
			
		||||
      "result": {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [],
 | 
			
		||||
          "flavor_text": "Gold currency",
 | 
			
		||||
          "functions": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "tags": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "Gold",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 3
 | 
			
		||||
      },
 | 
			
		||||
      "time_units": 30,
 | 
			
		||||
      "tools": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "item": {
 | 
			
		||||
            "customizations": [],
 | 
			
		||||
            "flavor_text": "Bronze currency",
 | 
			
		||||
            "functions": [],
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "Bronze",
 | 
			
		||||
            "physrep_requirements": "None",
 | 
			
		||||
            "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "visibility": []
 | 
			
		||||
          },
 | 
			
		||||
          "quantity": 1
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "visibility": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "test1"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "test2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "test3"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "schematic_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "material": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [],
 | 
			
		||||
          "flavor_text": "Bronze currency",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "Bronze",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 1
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [
 | 
			
		||||
            {
 | 
			
		||||
              "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
              "functions": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 2,
 | 
			
		||||
                  "name": "test2",
 | 
			
		||||
                  "tags": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1"
 | 
			
		||||
                    }
 | 
			
		||||
                  ],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 3,
 | 
			
		||||
                  "name": "test3",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1",
 | 
			
		||||
                      "tags": [],
 | 
			
		||||
                      "requirements": []
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "physrep_requirements": "Do you lift",
 | 
			
		||||
              "rules_description": "Ur mom gay",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "visibility": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "flavor_text": "Silver currency",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "Silver",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 2
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [],
 | 
			
		||||
          "flavor_text": "Gold currency",
 | 
			
		||||
          "functions": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "test1",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "tags": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "requirements": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "Gold",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 3
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "requirements": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2",
 | 
			
		||||
        "tags": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "requirements": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "requirements": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "result": {
 | 
			
		||||
      "id": 3,
 | 
			
		||||
      "item": {
 | 
			
		||||
        "customizations": [],
 | 
			
		||||
        "flavor_text": "Gold currency",
 | 
			
		||||
        "functions": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "test1",
 | 
			
		||||
            "tags": [],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "id": 2,
 | 
			
		||||
            "name": "test2",
 | 
			
		||||
            "tags": [
 | 
			
		||||
              {
 | 
			
		||||
                "id": 1,
 | 
			
		||||
                "name": "test1"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "requirements": []
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "Gold",
 | 
			
		||||
        "physrep_requirements": "None",
 | 
			
		||||
        "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
        "tags": [],
 | 
			
		||||
        "visibility": []
 | 
			
		||||
      },
 | 
			
		||||
      "quantity": 3
 | 
			
		||||
    },
 | 
			
		||||
    "time_units": 0,
 | 
			
		||||
    "tools": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "item": {
 | 
			
		||||
          "customizations": [
 | 
			
		||||
            {
 | 
			
		||||
              "flavor_text": "Skibbidy rizz ohio",
 | 
			
		||||
              "functions": [
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 1,
 | 
			
		||||
                  "name": "test1",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 2,
 | 
			
		||||
                  "name": "test2",
 | 
			
		||||
                  "tags": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1"
 | 
			
		||||
                    }
 | 
			
		||||
                  ],
 | 
			
		||||
                  "requirements": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "id": 3,
 | 
			
		||||
                  "name": "test3",
 | 
			
		||||
                  "tags": [],
 | 
			
		||||
                  "requirements": [
 | 
			
		||||
                    {
 | 
			
		||||
                      "id": 1,
 | 
			
		||||
                      "name": "test1",
 | 
			
		||||
                      "tags": [],
 | 
			
		||||
                      "requirements": []
 | 
			
		||||
                    }
 | 
			
		||||
                  ]
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "test2",
 | 
			
		||||
              "physrep_requirements": "Do you lift",
 | 
			
		||||
              "rules_description": "Ur mom gay",
 | 
			
		||||
              "tags": [],
 | 
			
		||||
              "visibility": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "flavor_text": "Silver currency",
 | 
			
		||||
          "functions": [],
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "Silver",
 | 
			
		||||
          "physrep_requirements": "None",
 | 
			
		||||
          "rules_description": "Money can be exchanged for goods and services",
 | 
			
		||||
          "tags": [],
 | 
			
		||||
          "visibility": []
 | 
			
		||||
        },
 | 
			
		||||
        "quantity": 2
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "visibility": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "test1"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "test2"
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 3,
 | 
			
		||||
        "name": "test3"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								test/fixtures/tiers.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								test/fixtures/tiers.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
{
 | 
			
		||||
  "$schema": "./schemas/tier.schema.json",
 | 
			
		||||
  "tiers": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": 1,
 | 
			
		||||
      "function_sets": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "function_sets": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": 1,
 | 
			
		||||
          "name": "function1",
 | 
			
		||||
          "requirements": [],
 | 
			
		||||
          "tags": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 2,
 | 
			
		||||
          "name": "function2",
 | 
			
		||||
          "requirements": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "function1",
 | 
			
		||||
              "requirements": [],
 | 
			
		||||
              "tags": []
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "tags": []
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": 3,
 | 
			
		||||
          "name": "function3",
 | 
			
		||||
          "requirements": [],
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "id": 1,
 | 
			
		||||
              "name": "tag1"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 2,
 | 
			
		||||
              "name": "tag2"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "id": 3,
 | 
			
		||||
              "name": "tag3"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "tier_update": {
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "function_sets": [
 | 
			
		||||
      {
 | 
			
		||||
        "id": 1,
 | 
			
		||||
        "name": "function1",
 | 
			
		||||
        "requirements": [],
 | 
			
		||||
        "tags": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "id": 2,
 | 
			
		||||
        "name": "function2",
 | 
			
		||||
        "requirements": [
 | 
			
		||||
          {
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "name": "function1",
 | 
			
		||||
            "requirements": [],
 | 
			
		||||
            "tags": []
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "tags": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										74
									
								
								test/go.mod
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								test/go.mod
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2,74 +2,65 @@ module api_test
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/tiertest => ./unit/tiertest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/persontest => ./unit/persontest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/grouptest => ./unit/grouptest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontest => ./unit/functiontest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functionsettest => ./unit/functionsettest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontagtest => ./unit/functiontagtest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ./lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ./lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../src/lib/api
 | 
			
		||||
replace example.com/api => ../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../src/lib/database
 | 
			
		||||
replace example.com/database => ../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/character v0.0.0
 | 
			
		||||
	example.com/database/customization v0.0.0
 | 
			
		||||
	example.com/database/function v0.0.0
 | 
			
		||||
	example.com/database/functionset v0.0.0
 | 
			
		||||
	example.com/database/functiontag v0.0.0
 | 
			
		||||
	example.com/database/group v0.0.0
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0
 | 
			
		||||
	example.com/database/item v0.0.0
 | 
			
		||||
	example.com/database/itemtag v0.0.0
 | 
			
		||||
	example.com/database/person v0.0.0
 | 
			
		||||
	example.com/database/role v0.0.0
 | 
			
		||||
	example.com/database/schematic v0.0.0
 | 
			
		||||
	example.com/database/tier v0.0.0
 | 
			
		||||
	example.com/database/user v0.0.0
 | 
			
		||||
	example.com/unit/functionsettest v0.0.0
 | 
			
		||||
	example.com/unit/functiontagtest v0.0.0
 | 
			
		||||
	example.com/unit/functiontest v0.0.0
 | 
			
		||||
	example.com/unit/grouptest v0.0.0
 | 
			
		||||
	example.com/unit/persontest v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	example.com/unit/tiertest v0.0.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -78,6 +69,20 @@ require (
 | 
			
		|||
	example.com/auth/discord v0.0.0 // indirect
 | 
			
		||||
	example.com/config/server v0.0.0 // indirect
 | 
			
		||||
	example.com/database v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/database/character v0.0.0 // indirect
 | 
			
		||||
	example.com/database/customization v0.0.0 // indirect
 | 
			
		||||
	example.com/database/function v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functionset v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/group v0.0.0 // indirect
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0 // indirect
 | 
			
		||||
	example.com/database/item v0.0.0 // indirect
 | 
			
		||||
	example.com/database/itemtag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/person v0.0.0 // indirect
 | 
			
		||||
	example.com/database/role v0.0.0 // indirect
 | 
			
		||||
	example.com/database/schematic v0.0.0 // indirect
 | 
			
		||||
	example.com/database/tier v0.0.0 // indirect
 | 
			
		||||
	example.com/database/user v0.0.0 // indirect
 | 
			
		||||
	example.com/test/testrequest v0.0.0 // indirect
 | 
			
		||||
	example.com/test/testsetup v0.0.0 // indirect
 | 
			
		||||
	github.com/bytedance/sonic v1.13.2 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -87,6 +92,7 @@ require (
 | 
			
		|||
	github.com/gabriel-vasile/mimetype v1.4.8 // indirect
 | 
			
		||||
	github.com/gin-contrib/cors v1.7.5 // indirect
 | 
			
		||||
	github.com/gin-contrib/sse v1.0.0 // indirect
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.1 // indirect
 | 
			
		||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
			
		||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
			
		||||
	github.com/go-playground/validator/v10 v10.26.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -116,5 +122,5 @@ require (
 | 
			
		|||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
	gorm.io/gorm v1.26.1 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,8 +15,8 @@ github.com/gin-contrib/cors v1.7.5 h1:cXC9SmofOrRg0w9PigwGlHG3ztswH6bqq4vJVXnvYM
 | 
			
		|||
github.com/gin-contrib/cors v1.7.5/go.mod h1:4q3yi7xBEDDWKapjT2o1V7mScKDDr8k+jZ0fSquGoy0=
 | 
			
		||||
github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
 | 
			
		||||
github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
 | 
			
		||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
 | 
			
		||||
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 | 
			
		||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +106,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 | 
			
		|||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
 | 
			
		||||
gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
 | 
			
		||||
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
 | 
			
		||||
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
 | 
			
		||||
gorm.io/gorm v1.26.1 h1:ghB2gUI9FkS46luZtn6DLZ0f6ooBJ5IbVej2ENFDjRw=
 | 
			
		||||
gorm.io/gorm v1.26.1/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE=
 | 
			
		||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,41 +2,41 @@ module example.com/test/testsetup
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/lib/api
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/lib/database
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/api v0.0.0-00010101000000-000000000000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										161
									
								
								test/unit/functionsettest/functionsettest.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								test/unit/functionsettest/functionsettest.go
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
package functionsettest
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	function "example.com/database/function"
 | 
			
		||||
	functionset "example.com/database/functionset"
 | 
			
		||||
	testrequest "example.com/test/testrequest"
 | 
			
		||||
	testsetup "example.com/test/testsetup"
 | 
			
		||||
	functiontest "example.com/unit/functiontest"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TestFunctionSet struct {
 | 
			
		||||
	Result []functionset.FunctionSet `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type FunctionSetTestSuite struct {
 | 
			
		||||
	suite.Suite
 | 
			
		||||
	globalAuthHeader      string
 | 
			
		||||
	router                *gin.Engine
 | 
			
		||||
	functionSet           functionset.FunctionSet
 | 
			
		||||
	functionSetJSON       []byte
 | 
			
		||||
	functionSetUpdate     functionset.FunctionSet
 | 
			
		||||
	functionSetUpdateJSON []byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) SetupTestSuite() {
 | 
			
		||||
	s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
 | 
			
		||||
	// Create Test Data
 | 
			
		||||
	fixtures, _ := os.ReadFile("fixtures/functionset.json")
 | 
			
		||||
	var functionSetFixtures struct {
 | 
			
		||||
		FunctionSets      []functionset.FunctionSet `json:"function_sets"`
 | 
			
		||||
		FunctionSetUpdate functionset.FunctionSet   `json:"function_set_update"`
 | 
			
		||||
	}
 | 
			
		||||
	json.Unmarshal(fixtures, &functionSetFixtures)
 | 
			
		||||
	s.functionSet = functionSetFixtures.FunctionSets[0]
 | 
			
		||||
	var functionSetFunctionIDs []uint
 | 
			
		||||
	for _, function := range s.functionSet.Functions {
 | 
			
		||||
		functionSetFunctionIDs = append(functionSetFunctionIDs, function.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.functionSetJSON, _ = json.Marshal(functionset.FunctionSetParams{
 | 
			
		||||
		Functions: functionSetFunctionIDs,
 | 
			
		||||
	})
 | 
			
		||||
	s.functionSetUpdate = functionSetFixtures.FunctionSetUpdate
 | 
			
		||||
	var functionSetUpdateFunctionIDs []uint
 | 
			
		||||
	for _, function := range s.functionSetUpdate.Functions {
 | 
			
		||||
		functionSetUpdateFunctionIDs = append(functionSetUpdateFunctionIDs, function.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.functionSetUpdateJSON, _ = json.Marshal(functionset.FunctionSetParams{
 | 
			
		||||
		Functions: functionSetUpdateFunctionIDs,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) TearDownTestSuite() {
 | 
			
		||||
	os.Remove("db/main.db")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) Test01CreateFunctionSet() {
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var output TestFunctionSet
 | 
			
		||||
	target := fmt.Sprintf("/function-set?id=%d", s.functionSet.ID)
 | 
			
		||||
 | 
			
		||||
	// Create needed field objects
 | 
			
		||||
	var functionOutput functiontest.TestFunction
 | 
			
		||||
	for _, function := range s.functionSet.Functions {
 | 
			
		||||
		functionBody, _ := json.Marshal(function)
 | 
			
		||||
		functionStatus := testrequest.MakePostRequest(&functionBody, "/function", s.globalAuthHeader, s.router)
 | 
			
		||||
		s.Equal(functionStatus, "200 OK", "function created successfully")
 | 
			
		||||
		functionTarget := fmt.Sprintf("/function?id=%d", function.ID)
 | 
			
		||||
		functionBody = testrequest.MakeGetRequest(functionTarget, s.router)
 | 
			
		||||
		json.Unmarshal(functionBody, &functionOutput)
 | 
			
		||||
		s.Equal(function.Name, functionOutput.Result[0].Name, "input function name matches output function name")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Attempt to create function set
 | 
			
		||||
	status := testrequest.MakePostRequest(&s.functionSetJSON, "/function-set", s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(status, "200 OK", "function created successfully")
 | 
			
		||||
 | 
			
		||||
	// Attempt to get function set
 | 
			
		||||
	body := testrequest.MakeGetRequest(target, s.router)
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	// Check that the function set listed matches the created function set
 | 
			
		||||
	s.Equal(s.functionSet.Functions[0].Name, output.Result[0].Functions[0].Name, "first input function name matches first output function name")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) Test02GetFunctionSet() {
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var output TestFunctionSet
 | 
			
		||||
 | 
			
		||||
	// Attempt to get function sets
 | 
			
		||||
	body := testrequest.MakeGetRequest("/function-set", s.router)
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	// Check that the function sets listed match the created function sets
 | 
			
		||||
	s.Equal(s.functionSet.Functions[0].Name, output.Result[0].Functions[0].Name, "first input function name matches first output function name")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) Test03UpdateFunctionSet() {
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var output TestFunctionSet
 | 
			
		||||
	target := fmt.Sprintf("/function-set?id=%d", s.functionSet.ID)
 | 
			
		||||
 | 
			
		||||
	// Create needed field objects
 | 
			
		||||
	var functionOutput functiontest.TestFunction
 | 
			
		||||
	for _, updateFunction := range s.functionSetUpdate.Functions {
 | 
			
		||||
		var functionTagIDs []uint
 | 
			
		||||
		for _, tag := range updateFunction.Tags {
 | 
			
		||||
			tagBody, _ := json.Marshal(tag)
 | 
			
		||||
			testrequest.MakePostRequest(&tagBody, "/function-tag", s.globalAuthHeader, s.router)
 | 
			
		||||
			functionTagIDs = append(functionTagIDs, tag.ID)
 | 
			
		||||
		}
 | 
			
		||||
		var functionRequirementIDs []uint
 | 
			
		||||
		for _, requirement := range updateFunction.Requirements {
 | 
			
		||||
			functionRequirementIDs = append(functionRequirementIDs, requirement.ID)
 | 
			
		||||
		}
 | 
			
		||||
		functionBody, _ := json.Marshal(function.FunctionParams{
 | 
			
		||||
			Name:         updateFunction.Name,
 | 
			
		||||
			Tags:         functionTagIDs,
 | 
			
		||||
			Requirements: functionRequirementIDs,
 | 
			
		||||
		})
 | 
			
		||||
		functionStatus := testrequest.MakePostRequest(&functionBody, "/function", s.globalAuthHeader, s.router)
 | 
			
		||||
		s.Equal(functionStatus, "200 OK", "function created successfully")
 | 
			
		||||
		functionTarget := fmt.Sprintf("/function?id=%d", updateFunction.ID)
 | 
			
		||||
		functionBody = testrequest.MakeGetRequest(functionTarget, s.router)
 | 
			
		||||
		json.Unmarshal(functionBody, &functionOutput)
 | 
			
		||||
		s.Equal(updateFunction.Name, functionOutput.Result[0].Name, "input function name matches output function name")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Attempt to update function set
 | 
			
		||||
	status := testrequest.MakePutRequest(&s.functionSetUpdateJSON, target, s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(status, "200 OK", "function set created successfully")
 | 
			
		||||
 | 
			
		||||
	// Attempt to get function set
 | 
			
		||||
	body := testrequest.MakeGetRequest(target, s.router)
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	// Check that the function set listed matches the updated function
 | 
			
		||||
	s.Equal(s.functionSetUpdate.Functions[0].Name, output.Result[0].Functions[0].Name, "first updated function name matches first output function name")
 | 
			
		||||
	s.Equal(s.functionSetUpdate.Functions[1].Name, output.Result[0].Functions[1].Name, "second updated function name matches second output function name")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionSetTestSuite) Test04DeleteFunctionSet() {
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var output TestFunctionSet
 | 
			
		||||
	target := fmt.Sprintf("/function-set?id=%d", s.functionSet.ID)
 | 
			
		||||
 | 
			
		||||
	// Attempt to delete function set
 | 
			
		||||
	status := testrequest.MakeDeleteRequest(target, s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(status, "200 OK", "function deleted successfully")
 | 
			
		||||
 | 
			
		||||
	// Attempt to get function set
 | 
			
		||||
	body := testrequest.MakeGetRequest("/function-set", s.router)
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	// Check that the function set list is empty
 | 
			
		||||
	s.Equal(0, len(output.Result), "function set list is empty")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										115
									
								
								test/unit/functionsettest/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								test/unit/functionsettest/go.mod
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,115 @@
 | 
			
		|||
module example.com/unit/functionsettest
 | 
			
		||||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/grouptest => ../../unit/grouptest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontest => ../../unit/functiontest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontagtest => ../../unit/functiontagtest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/function v0.0.0
 | 
			
		||||
	example.com/database/functionset v0.0.0
 | 
			
		||||
	example.com/test/testrequest v0.0.0
 | 
			
		||||
	example.com/test/testsetup v0.0.0
 | 
			
		||||
	example.com/unit/functiontest v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/api v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/auth/discord v0.0.0 // indirect
 | 
			
		||||
	example.com/config/server v0.0.0 // indirect
 | 
			
		||||
	example.com/database v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/database/character v0.0.0 // indirect
 | 
			
		||||
	example.com/database/customization v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/group v0.0.0 // indirect
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0 // indirect
 | 
			
		||||
	example.com/database/item v0.0.0 // indirect
 | 
			
		||||
	example.com/database/itemtag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/person v0.0.0 // indirect
 | 
			
		||||
	example.com/database/role v0.0.0 // indirect
 | 
			
		||||
	example.com/database/schematic v0.0.0 // indirect
 | 
			
		||||
	example.com/database/tier v0.0.0 // indirect
 | 
			
		||||
	example.com/database/user v0.0.0 // indirect
 | 
			
		||||
	github.com/bytedance/sonic v1.13.2 // indirect
 | 
			
		||||
	github.com/bytedance/sonic/loader v0.2.4 // indirect
 | 
			
		||||
	github.com/cloudwego/base64x v0.1.5 // indirect
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
			
		||||
	github.com/gabriel-vasile/mimetype v1.4.8 // indirect
 | 
			
		||||
	github.com/gin-contrib/cors v1.7.5 // indirect
 | 
			
		||||
	github.com/gin-contrib/sse v1.0.0 // indirect
 | 
			
		||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
			
		||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
			
		||||
	github.com/go-playground/validator/v10 v10.26.0 // indirect
 | 
			
		||||
	github.com/goccy/go-json v0.10.5 // indirect
 | 
			
		||||
	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
 | 
			
		||||
	github.com/jinzhu/inflection v1.0.0 // indirect
 | 
			
		||||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
			
		||||
	github.com/json-iterator/go v1.1.12 // indirect
 | 
			
		||||
	github.com/klauspost/cpuid/v2 v2.2.10 // indirect
 | 
			
		||||
	github.com/leodido/go-urn v1.4.0 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
			
		||||
	github.com/mattn/go-sqlite3 v1.14.22 // indirect
 | 
			
		||||
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 | 
			
		||||
	github.com/modern-go/reflect2 v1.0.2 // indirect
 | 
			
		||||
	github.com/pelletier/go-toml/v2 v2.2.4 // indirect
 | 
			
		||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
			
		||||
	github.com/ravener/discord-oauth2 v0.0.0-20230514095040-ae65713199b3 // indirect
 | 
			
		||||
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
 | 
			
		||||
	github.com/ugorji/go/codec v1.2.12 // indirect
 | 
			
		||||
	github.com/xyproto/randomstring v1.2.0 // indirect
 | 
			
		||||
	golang.org/x/arch v0.15.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.36.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.38.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.29.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.31.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.23.0 // indirect
 | 
			
		||||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,20 @@
 | 
			
		|||
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
 | 
			
		||||
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
 | 
			
		||||
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
 | 
			
		||||
github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ=
 | 
			
		||||
github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4=
 | 
			
		||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
 | 
			
		||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
 | 
			
		||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 | 
			
		||||
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
 | 
			
		||||
github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY=
 | 
			
		||||
github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
 | 
			
		||||
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
 | 
			
		||||
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 | 
			
		||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
 | 
			
		||||
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
 | 
			
		||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 | 
			
		||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 | 
			
		||||
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
 | 
			
		||||
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
 | 
			
		||||
github.com/gin-contrib/cors v1.7.5 h1:cXC9SmofOrRg0w9PigwGlHG3ztswH6bqq4vJVXnvYMk=
 | 
			
		||||
github.com/gin-contrib/cors v1.7.5/go.mod h1:4q3yi7xBEDDWKapjT2o1V7mScKDDr8k+jZ0fSquGoy0=
 | 
			
		||||
github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
 | 
			
		||||
github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 | 
			
		||||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
 | 
			
		||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
 | 
			
		||||
| 
						 | 
				
			
			@ -21,12 +23,14 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
 | 
			
		|||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
 | 
			
		||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
 | 
			
		||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
 | 
			
		||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
 | 
			
		||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 | 
			
		||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
 | 
			
		||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
 | 
			
		||||
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
 | 
			
		||||
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
 | 
			
		||||
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
 | 
			
		||||
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
 | 
			
		||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 | 
			
		||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 | 
			
		||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 | 
			
		||||
| 
						 | 
				
			
			@ -35,22 +39,32 @@ github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
 | 
			
		|||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 | 
			
		||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 | 
			
		||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
 | 
			
		||||
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
 | 
			
		||||
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
 | 
			
		||||
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
 | 
			
		||||
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
 | 
			
		||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
 | 
			
		||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 | 
			
		||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
 | 
			
		||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
 | 
			
		||||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
 | 
			
		||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 | 
			
		||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
 | 
			
		||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
 | 
			
		||||
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 | 
			
		||||
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/ravener/discord-oauth2 v0.0.0-20230514095040-ae65713199b3 h1:x3LgcvujjG+mx8PUMfPmwn3tcu2aA95uCB6ilGGObWk=
 | 
			
		||||
github.com/ravener/discord-oauth2 v0.0.0-20230514095040-ae65713199b3/go.mod h1:P/mZMYLZ87lqRSECEWsOqywGrO1hlZkk9RTwEw35IP4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 | 
			
		||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 | 
			
		||||
| 
						 | 
				
			
			@ -61,35 +75,37 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 | 
			
		|||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 | 
			
		||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 | 
			
		||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 | 
			
		||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 | 
			
		||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 | 
			
		||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
 | 
			
		||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 | 
			
		||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
 | 
			
		||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
 | 
			
		||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
 | 
			
		||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 | 
			
		||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
 | 
			
		||||
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
 | 
			
		||||
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 | 
			
		||||
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
 | 
			
		||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 | 
			
		||||
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
 | 
			
		||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 | 
			
		||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
github.com/xyproto/randomstring v1.2.0 h1:y7PXAEBM3XlwJjPG2JQg4voxBYZ4+hPgRdGKCfU8wik=
 | 
			
		||||
github.com/xyproto/randomstring v1.2.0/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
 | 
			
		||||
golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw=
 | 
			
		||||
golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
 | 
			
		||||
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
 | 
			
		||||
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
 | 
			
		||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
 | 
			
		||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 | 
			
		||||
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
 | 
			
		||||
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 | 
			
		||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
 | 
			
		||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
			
		||||
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
 | 
			
		||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
 | 
			
		||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 | 
			
		||||
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
 | 
			
		||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 | 
			
		||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
 | 
			
		||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 | 
			
		||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
 | 
			
		||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 | 
			
		||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 | 
			
		||||
gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
 | 
			
		||||
gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
 | 
			
		||||
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
 | 
			
		||||
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
 | 
			
		||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
 | 
			
		||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +10,6 @@ import (
 | 
			
		|||
	testsetup "example.com/test/testsetup"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TestFunctionTag struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -29,9 +28,15 @@ type FunctionTagTestSuite struct {
 | 
			
		|||
func (s *FunctionTagTestSuite) SetupTestSuite() {
 | 
			
		||||
	s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
 | 
			
		||||
	// Create Test Data
 | 
			
		||||
	s.functiontag = functiontag.FunctionTag{Model: gorm.Model{ID: 1}, Name: "test"}
 | 
			
		||||
	fixtures, _ := os.ReadFile("fixtures/functiontags.json")
 | 
			
		||||
	var functionTagFixtures struct {
 | 
			
		||||
		FunctionTags      []functiontag.FunctionTag `json:"function_tags"`
 | 
			
		||||
		FunctionTagUpdate functiontag.FunctionTag   `json:"function_tag_update"`
 | 
			
		||||
	}
 | 
			
		||||
	json.Unmarshal(fixtures, &functionTagFixtures)
 | 
			
		||||
	s.functiontag = functionTagFixtures.FunctionTags[0]
 | 
			
		||||
	s.functiontagJSON, _ = json.Marshal(s.functiontag)
 | 
			
		||||
	s.functiontagUpdate = functiontag.FunctionTag{Model: gorm.Model{ID: 1}, Name: "another_test"}
 | 
			
		||||
	s.functiontagUpdate = functionTagFixtures.FunctionTagUpdate
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionTagTestSuite) TearDownTestSuite() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,45 +2,45 @@ module example.com/unit/functiontagtest
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/lib/api
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/lib/database
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/functiontag v0.0.0
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,6 @@ require (
 | 
			
		|||
	example.com/test/testsetup v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	gorm.io/gorm v1.25.12
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -105,4 +104,5 @@ require (
 | 
			
		|||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,13 +6,10 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
 | 
			
		||||
	function "example.com/database/function"
 | 
			
		||||
	"example.com/database/functiontag"
 | 
			
		||||
	testrequest "example.com/test/testrequest"
 | 
			
		||||
	testsetup "example.com/test/testsetup"
 | 
			
		||||
	functiontagtest "example.com/unit/functiontagtest"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TestFunction struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -32,38 +29,44 @@ type FunctionTestSuite struct {
 | 
			
		|||
func (s *FunctionTestSuite) SetupTestSuite() {
 | 
			
		||||
	s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
 | 
			
		||||
	// Create Test Data
 | 
			
		||||
	testFunctionTag := functiontag.FunctionTag{
 | 
			
		||||
		Model: gorm.Model{ID: 1},
 | 
			
		||||
		Name:  "test",
 | 
			
		||||
	fixtures, _ := os.ReadFile("fixtures/functions.json")
 | 
			
		||||
	var functionFixtures struct {
 | 
			
		||||
		Functions      []function.Function `json:"functions"`
 | 
			
		||||
		FunctionUpdate function.Function   `json:"function_update"`
 | 
			
		||||
	}
 | 
			
		||||
	testFunction := function.Function{
 | 
			
		||||
		Model:        gorm.Model{ID: 2},
 | 
			
		||||
		Name:         "test",
 | 
			
		||||
		Tags:         []functiontag.FunctionTag{},
 | 
			
		||||
		Requirements: []function.Function{},
 | 
			
		||||
	json.Unmarshal(fixtures, &functionFixtures)
 | 
			
		||||
	s.function = functionFixtures.Functions[0]
 | 
			
		||||
	var functionTagIDs []uint
 | 
			
		||||
	for _, tag := range s.function.Tags {
 | 
			
		||||
		functionTagIDs = append(functionTagIDs, tag.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.function = function.Function{
 | 
			
		||||
		Model:        gorm.Model{ID: 1},
 | 
			
		||||
		Name:         "another_test",
 | 
			
		||||
		Tags:         []functiontag.FunctionTag{},
 | 
			
		||||
		Requirements: []function.Function{},
 | 
			
		||||
	var functionRequirementIDs []uint
 | 
			
		||||
	for _, requirement := range s.function.Requirements {
 | 
			
		||||
		functionRequirementIDs = append(functionRequirementIDs, requirement.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.functionJSON, _ = json.Marshal(s.function)
 | 
			
		||||
	s.functionUpdate = function.Function{
 | 
			
		||||
		Model: gorm.Model{ID: 1},
 | 
			
		||||
		Name:  "yet_another_test",
 | 
			
		||||
		Tags: []functiontag.FunctionTag{
 | 
			
		||||
			testFunctionTag,
 | 
			
		||||
		},
 | 
			
		||||
		Requirements: []function.Function{
 | 
			
		||||
			testFunction,
 | 
			
		||||
		},
 | 
			
		||||
	s.functionJSON, _ = json.Marshal(function.FunctionParams{
 | 
			
		||||
		Name:         s.function.Name,
 | 
			
		||||
		Tags:         functionTagIDs,
 | 
			
		||||
		Requirements: functionRequirementIDs,
 | 
			
		||||
	})
 | 
			
		||||
	s.functionUpdate = functionFixtures.FunctionUpdate
 | 
			
		||||
	var functionUpdateTagIDs []uint
 | 
			
		||||
	for _, tag := range s.functionUpdate.Tags {
 | 
			
		||||
		functionUpdateTagIDs = append(functionUpdateTagIDs, tag.ID)
 | 
			
		||||
	}
 | 
			
		||||
	var functionUpdateRequirementIDs []uint
 | 
			
		||||
	for _, requirement := range s.functionUpdate.Requirements {
 | 
			
		||||
		functionUpdateRequirementIDs = append(functionUpdateRequirementIDs, requirement.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.functionUpdateJSON, _ = json.Marshal(function.FunctionParams{
 | 
			
		||||
		Name:         s.functionUpdate.Name,
 | 
			
		||||
		Tags:         []uint{1},
 | 
			
		||||
		Requirements: []uint{2},
 | 
			
		||||
		Tags:         functionUpdateTagIDs,
 | 
			
		||||
		Requirements: functionUpdateRequirementIDs,
 | 
			
		||||
	})
 | 
			
		||||
	for _, tag := range s.functionUpdate.Tags {
 | 
			
		||||
		tagBody, _ := json.Marshal(tag)
 | 
			
		||||
		testrequest.MakePostRequest(&tagBody, "/function-tag", s.globalAuthHeader, s.router)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *FunctionTestSuite) TearDownTestSuite() {
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +79,7 @@ func (s *FunctionTestSuite) Test01CreateFunction() {
 | 
			
		|||
	target := fmt.Sprintf("/function?id=%d", s.function.ID)
 | 
			
		||||
 | 
			
		||||
	// Attempt to create function
 | 
			
		||||
	fmt.Println(string(s.functionJSON))
 | 
			
		||||
	status := testrequest.MakePostRequest(&s.functionJSON, "/function", s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(status, "200 OK", "function created successfully")
 | 
			
		||||
| 
						 | 
				
			
			@ -107,36 +111,22 @@ func (s *FunctionTestSuite) Test03UpdateFunction() {
 | 
			
		|||
 | 
			
		||||
	// Create needed field objects
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var functionTagOutput functiontagtest.TestFunctionTag
 | 
			
		||||
	functionTagBody, _ := json.Marshal(s.functionUpdate.Tags[0])
 | 
			
		||||
	// Attempt to create function tag
 | 
			
		||||
	functionTagStatus := testrequest.MakePostRequest(&functionTagBody, "/function-tag", s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(functionTagStatus, "200 OK", "function tag created successfully")
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	functionTagTarget := fmt.Sprintf("/function-tag?id=%d", s.functionUpdate.Tags[0].ID)
 | 
			
		||||
	// Attempt to get function tag
 | 
			
		||||
	functionTagBody = testrequest.MakeGetRequest(functionTagTarget, s.router)
 | 
			
		||||
	// Unamrshal the result
 | 
			
		||||
	json.Unmarshal(functionTagBody, &functionTagOutput)
 | 
			
		||||
	// Check that the function tag listed matches the created function tag
 | 
			
		||||
	s.Equal(s.functionUpdate.Tags[0].Name, functionTagOutput.Result[0].Name, "input function tag name matches created function tag name")
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	var functionOutput TestFunction
 | 
			
		||||
	functionBody, _ := json.Marshal(s.functionUpdate.Requirements[0])
 | 
			
		||||
	// Attempt to create function
 | 
			
		||||
	functionStatus := testrequest.MakePostRequest(&functionBody, "/function", s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
	s.Equal(functionStatus, "200 OK", "function created successfully")
 | 
			
		||||
	// Setup variables
 | 
			
		||||
	functionTarget := fmt.Sprintf("/function?id=%d", s.functionUpdate.Requirements[0].ID)
 | 
			
		||||
	// Attempt to get function
 | 
			
		||||
	functionBody = testrequest.MakeGetRequest(functionTarget, s.router)
 | 
			
		||||
	// Unmarshal the result
 | 
			
		||||
	json.Unmarshal(functionBody, &functionOutput)
 | 
			
		||||
	// Check that the function listed matches the created function
 | 
			
		||||
	s.Equal(s.functionUpdate.Requirements[0].Name, functionOutput.Result[0].Name, "input function name matches created function name")
 | 
			
		||||
 | 
			
		||||
	for _, requirement := range s.functionUpdate.Requirements {
 | 
			
		||||
		var requirementTagIDs []uint
 | 
			
		||||
		for _, tag := range s.function.Tags {
 | 
			
		||||
			requirementTagIDs = append(requirementTagIDs, tag.ID)
 | 
			
		||||
		}
 | 
			
		||||
		var requirementRequirementIDs []uint
 | 
			
		||||
		for _, requirement := range s.function.Requirements {
 | 
			
		||||
			requirementRequirementIDs = append(requirementRequirementIDs, requirement.ID)
 | 
			
		||||
		}
 | 
			
		||||
		requirementBody, _ := json.Marshal(function.FunctionParams{
 | 
			
		||||
			Name:         requirement.Name,
 | 
			
		||||
			Tags:         requirementTagIDs,
 | 
			
		||||
			Requirements: requirementRequirementIDs,
 | 
			
		||||
		})
 | 
			
		||||
		testrequest.MakePostRequest(&requirementBody, "/function", s.globalAuthHeader, s.router)
 | 
			
		||||
	}
 | 
			
		||||
	// Attempt to update function
 | 
			
		||||
	status := testrequest.MakePutRequest(&s.functionUpdateJSON, target, s.globalAuthHeader, s.router)
 | 
			
		||||
	// Check that the request was successful
 | 
			
		||||
| 
						 | 
				
			
			@ -163,9 +153,9 @@ func (s *FunctionTestSuite) Test04DeleteFunction() {
 | 
			
		|||
	s.Equal(status, "200 OK", "function deleted successfully")
 | 
			
		||||
 | 
			
		||||
	// Attempt to get function
 | 
			
		||||
	body := testrequest.MakeGetRequest(target, s.router)
 | 
			
		||||
	body := testrequest.MakeGetRequest("/function", s.router)
 | 
			
		||||
	// Unmarshal the result
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	// Check that the function list has one entry
 | 
			
		||||
	s.Equal(1, len(output.Result), "function list has one entry left")
 | 
			
		||||
	// Check that the function list only has two entries
 | 
			
		||||
	s.Equal(2, len(output.Result), "function list has two entries left")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,58 +2,56 @@ module example.com/unit/functiontest
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/lib/api
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/lib/database
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontagtest => ../../unit/functiontagtest
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/grouptest => ../../unit/grouptest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/unit/functiontagtest v0.0.0
 | 
			
		||||
	example.com/database/group v0.0.0
 | 
			
		||||
	example.com/database/person v0.0.0
 | 
			
		||||
	example.com/database/function v0.0.0
 | 
			
		||||
	example.com/test/testrequest v0.0.0
 | 
			
		||||
	example.com/test/testsetup v0.0.0
 | 
			
		||||
	example.com/unit/grouptest v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	gorm.io/gorm v1.25.12
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -63,12 +61,13 @@ require (
 | 
			
		|||
	example.com/database v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/database/character v0.0.0 // indirect
 | 
			
		||||
	example.com/database/customization v0.0.0 // indirect
 | 
			
		||||
	example.com/database/function v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functionset v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/group v0.0.0 // indirect
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0 // indirect
 | 
			
		||||
	example.com/database/item v0.0.0 // indirect
 | 
			
		||||
	example.com/database/itemtag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/person v0.0.0 // indirect
 | 
			
		||||
	example.com/database/role v0.0.0 // indirect
 | 
			
		||||
	example.com/database/schematic v0.0.0 // indirect
 | 
			
		||||
	example.com/database/tier v0.0.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -109,4 +108,5 @@ require (
 | 
			
		|||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,45 +2,45 @@ module example.com/unit/grouptest
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/lib/api
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/lib/database
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/group v0.0.0
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +48,6 @@ require (
 | 
			
		|||
	example.com/test/testsetup v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	gorm.io/gorm v1.25.12
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -105,4 +104,5 @@ require (
 | 
			
		|||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,6 @@ import (
 | 
			
		|||
	testsetup "example.com/test/testsetup"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TestGroup struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -29,9 +28,15 @@ type GroupTestSuite struct {
 | 
			
		|||
func (s *GroupTestSuite) SetupTestSuite() {
 | 
			
		||||
	s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
 | 
			
		||||
	// Create Test Data
 | 
			
		||||
	s.group = group.Group{Model: gorm.Model{ID: 1}, Name: "test"}
 | 
			
		||||
	fixtures, _ := os.ReadFile("fixtures/groups.json")
 | 
			
		||||
	var groupFixtures struct {
 | 
			
		||||
		Groups      []group.Group `json:"groups"`
 | 
			
		||||
		GroupUpdate group.Group   `json:"group_update"`
 | 
			
		||||
	}
 | 
			
		||||
	json.Unmarshal(fixtures, &groupFixtures)
 | 
			
		||||
	s.group = groupFixtures.Groups[0]
 | 
			
		||||
	s.groupJSON, _ = json.Marshal(s.group)
 | 
			
		||||
	s.groupUpdate = group.Group{Model: gorm.Model{ID: 1}, Name: "another_test"}
 | 
			
		||||
	s.groupUpdate = groupFixtures.GroupUpdate
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *GroupTestSuite) TearDownTestSuite() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,11 +2,11 @@ module example.com/unit/persontest
 | 
			
		|||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/lib/api
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/lib/database
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/lib/database/user
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/grouptest => ../../unit/grouptest
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,45 +14,43 @@ replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		|||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/lib/database/character
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/lib/database/functionset
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/lib/database/inventoryslot
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/lib/database/customization
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/lib/database/item
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/lib/database/itemtag
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/lib/database/person
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/lib/database/role
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/lib/database/schematic
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/lib/database/tier
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/lib/database/group
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/lib/database/function
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/lib/database/functiontag
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/lib/config/server
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/lib/auth/discord
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/unit/grouptest v0.0.0
 | 
			
		||||
	example.com/database/group v0.0.0
 | 
			
		||||
	example.com/database/person v0.0.0
 | 
			
		||||
	example.com/test/testrequest v0.0.0
 | 
			
		||||
	example.com/test/testsetup v0.0.0
 | 
			
		||||
	example.com/unit/grouptest v0.0.0
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.0
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	gorm.io/gorm v1.25.12
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +63,7 @@ require (
 | 
			
		|||
	example.com/database/function v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functionset v0.0.0 // indirect
 | 
			
		||||
	example.com/database/functiontag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/group v0.0.0 // indirect
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0 // indirect
 | 
			
		||||
	example.com/database/item v0.0.0 // indirect
 | 
			
		||||
	example.com/database/itemtag v0.0.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -108,4 +107,5 @@ require (
 | 
			
		|||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
	gorm.io/gorm v1.25.12 // indirect
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,14 +5,12 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	group "example.com/database/group"
 | 
			
		||||
	person "example.com/database/person"
 | 
			
		||||
	testrequest "example.com/test/testrequest"
 | 
			
		||||
	testsetup "example.com/test/testsetup"
 | 
			
		||||
	grouptest "example.com/unit/grouptest"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TestPerson struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -32,27 +30,29 @@ type PersonTestSuite struct {
 | 
			
		|||
func (s *PersonTestSuite) SetupTestSuite() {
 | 
			
		||||
	s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
 | 
			
		||||
	// Create Test Data
 | 
			
		||||
	testGroup := group.Group{
 | 
			
		||||
		Model: gorm.Model{ID: 1},
 | 
			
		||||
		Name:  "one",
 | 
			
		||||
	fixtures, _ := os.ReadFile("fixtures/persons.json")
 | 
			
		||||
	var personFixtures struct {
 | 
			
		||||
		Persons      []person.Person `json:"persons"`
 | 
			
		||||
		PersonUpdate person.Person   `json:"person_update"`
 | 
			
		||||
	}
 | 
			
		||||
	testGroups := []group.Group{}
 | 
			
		||||
	var updatedGroups []group.Group
 | 
			
		||||
	updatedGroups = append(updatedGroups, testGroup)
 | 
			
		||||
	s.person = person.Person{
 | 
			
		||||
		Model:  gorm.Model{ID: 2},
 | 
			
		||||
		Name:   "another_test",
 | 
			
		||||
		Groups: testGroups,
 | 
			
		||||
	json.Unmarshal(fixtures, &personFixtures)
 | 
			
		||||
	s.person = personFixtures.Persons[0]
 | 
			
		||||
	var personGroupsIDs []uint
 | 
			
		||||
	for _, group := range s.person.Groups {
 | 
			
		||||
		personGroupsIDs = append(personGroupsIDs, group.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.personJSON, _ = json.Marshal(s.person)
 | 
			
		||||
	s.personUpdate = person.Person{
 | 
			
		||||
		Model:  gorm.Model{ID: 2},
 | 
			
		||||
		Name:   "yet_another_test",
 | 
			
		||||
		Groups: updatedGroups,
 | 
			
		||||
	s.personJSON, _ = json.Marshal(person.PersonParams{
 | 
			
		||||
		Name:   s.person.Name,
 | 
			
		||||
		Groups: personGroupsIDs,
 | 
			
		||||
	})
 | 
			
		||||
	s.personUpdate = personFixtures.PersonUpdate
 | 
			
		||||
	var personUpdateGroupsIDs []uint
 | 
			
		||||
	for _, group := range s.personUpdate.Groups {
 | 
			
		||||
		personUpdateGroupsIDs = append(personUpdateGroupsIDs, group.ID)
 | 
			
		||||
	}
 | 
			
		||||
	s.personUpdateJSON, _ = json.Marshal(person.PersonParams{
 | 
			
		||||
		Name:   s.personUpdate.Name,
 | 
			
		||||
		Groups: []uint{1},
 | 
			
		||||
		Groups: personUpdateGroupsIDs,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +74,7 @@ func (s *PersonTestSuite) Test01CreatePerson() {
 | 
			
		|||
	body := testrequest.MakeGetRequest(target, s.router)
 | 
			
		||||
	// Unmarshal the result
 | 
			
		||||
	json.Unmarshal(body, &output)
 | 
			
		||||
	fmt.Println(string(body))
 | 
			
		||||
	// Check that the person listed matches the created person
 | 
			
		||||
	s.Equal(s.person.Name, output.Result[0].Name, "input name matches output name")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -97,12 +98,15 @@ func (s *PersonTestSuite) Test03UpdatePerson() {
 | 
			
		|||
 | 
			
		||||
	// Create needed field objects
 | 
			
		||||
	var groupOutput grouptest.TestGroup
 | 
			
		||||
	groupBody, _ := json.Marshal(s.personUpdate.Groups[0])
 | 
			
		||||
	groupStatus := testrequest.MakePostRequest(&groupBody, "/group", s.globalAuthHeader, s.router)
 | 
			
		||||
	s.Equal(groupStatus, "200 OK", "group created successfully")
 | 
			
		||||
	groupTarget := fmt.Sprintf("/group?id=%d", s.personUpdate.Groups[0].ID)
 | 
			
		||||
	groupBody = testrequest.MakeGetRequest(groupTarget, s.router)
 | 
			
		||||
	json.Unmarshal(groupBody, &groupOutput)
 | 
			
		||||
	for _, group := range s.personUpdate.Groups {
 | 
			
		||||
		groupBody, _ := json.Marshal(group)
 | 
			
		||||
		groupStatus := testrequest.MakePostRequest(&groupBody, "/group", s.globalAuthHeader, s.router)
 | 
			
		||||
		s.Equal(groupStatus, "200 OK", "group created successfully")
 | 
			
		||||
		groupTarget := fmt.Sprintf("/group?id=%d", group.ID)
 | 
			
		||||
		groupBody = testrequest.MakeGetRequest(groupTarget, s.router)
 | 
			
		||||
		json.Unmarshal(groupBody, &groupOutput)
 | 
			
		||||
		s.Equal(group.Name, groupOutput.Result[0].Name, "input group name matches output group name")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Attempt to update person
 | 
			
		||||
	status := testrequest.MakePutRequest(&s.personUpdateJSON, target, s.globalAuthHeader, s.router)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										110
									
								
								test/unit/tiertest/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								test/unit/tiertest/go.mod
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,110 @@
 | 
			
		|||
module example.com/unit/tiertest
 | 
			
		||||
 | 
			
		||||
go 1.24.2
 | 
			
		||||
 | 
			
		||||
replace example.com/api => ../../../src/modules/api
 | 
			
		||||
 | 
			
		||||
replace example.com/database => ../../../src/modules/database
 | 
			
		||||
 | 
			
		||||
replace example.com/database/user => ../../../src/modules/database/user
 | 
			
		||||
 | 
			
		||||
replace example.com/unit/functiontagtest => ../../unit/functiontagtest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testrequest => ../../lib/testrequest
 | 
			
		||||
 | 
			
		||||
replace example.com/test/testsetup => ../../lib/testsetup
 | 
			
		||||
 | 
			
		||||
replace example.com/database/character => ../../../src/modules/database/character
 | 
			
		||||
 | 
			
		||||
replace example.com/database/inventoryslot => ../../../src/modules/database/inventoryslot
 | 
			
		||||
 | 
			
		||||
replace example.com/database/customization => ../../../src/modules/database/customization
 | 
			
		||||
 | 
			
		||||
replace example.com/database/item => ../../../src/modules/database/item
 | 
			
		||||
 | 
			
		||||
replace example.com/database/itemtag => ../../../src/modules/database/itemtag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/person => ../../../src/modules/database/person
 | 
			
		||||
 | 
			
		||||
replace example.com/database/role => ../../../src/modules/database/role
 | 
			
		||||
 | 
			
		||||
replace example.com/database/schematic => ../../../src/modules/database/schematic
 | 
			
		||||
 | 
			
		||||
replace example.com/database/tier => ../../../src/modules/database/tier
 | 
			
		||||
 | 
			
		||||
replace example.com/database/group => ../../../src/modules/database/group
 | 
			
		||||
 | 
			
		||||
replace example.com/database/function => ../../../src/modules/database/function
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functiontag => ../../../src/modules/database/functiontag
 | 
			
		||||
 | 
			
		||||
replace example.com/database/functionset => ../../../src/modules/database/functionset
 | 
			
		||||
 | 
			
		||||
replace example.com/config/server => ../../../src/modules/config/server
 | 
			
		||||
 | 
			
		||||
replace example.com/auth/discord => ../../../src/modules/auth/discord
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/database/function v0.0.0
 | 
			
		||||
	example.com/database/functionset v0.0.0
 | 
			
		||||
	example.com/database/functiontag v0.0.0
 | 
			
		||||
	example.com/database/tier v0.0.0
 | 
			
		||||
	example.com/test/testrequest v0.0.0-00010101000000-000000000000
 | 
			
		||||
	example.com/test/testsetup v0.0.0-00010101000000-000000000000
 | 
			
		||||
	github.com/gin-gonic/gin v1.10.1
 | 
			
		||||
	github.com/stretchr/testify v1.10.0
 | 
			
		||||
	gorm.io/gorm v1.26.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	example.com/api v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/auth/discord v0.0.0 // indirect
 | 
			
		||||
	example.com/config/server v0.0.0 // indirect
 | 
			
		||||
	example.com/database v0.0.0-00010101000000-000000000000 // indirect
 | 
			
		||||
	example.com/database/character v0.0.0 // indirect
 | 
			
		||||
	example.com/database/customization v0.0.0 // indirect
 | 
			
		||||
	example.com/database/group v0.0.0 // indirect
 | 
			
		||||
	example.com/database/inventoryslot v0.0.0 // indirect
 | 
			
		||||
	example.com/database/item v0.0.0 // indirect
 | 
			
		||||
	example.com/database/itemtag v0.0.0 // indirect
 | 
			
		||||
	example.com/database/person v0.0.0 // indirect
 | 
			
		||||
	example.com/database/role v0.0.0 // indirect
 | 
			
		||||
	example.com/database/schematic v0.0.0 // indirect
 | 
			
		||||
	example.com/database/user v0.0.0 // indirect
 | 
			
		||||
	github.com/bytedance/sonic v1.13.2 // indirect
 | 
			
		||||
	github.com/bytedance/sonic/loader v0.2.4 // indirect
 | 
			
		||||
	github.com/cloudwego/base64x v0.1.5 // indirect
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
			
		||||
	github.com/gabriel-vasile/mimetype v1.4.8 // indirect
 | 
			
		||||
	github.com/gin-contrib/cors v1.7.5 // indirect
 | 
			
		||||
	github.com/gin-contrib/sse v1.0.0 // indirect
 | 
			
		||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
			
		||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
			
		||||
	github.com/go-playground/validator/v10 v10.26.0 // indirect
 | 
			
		||||
	github.com/goccy/go-json v0.10.5 // indirect
 | 
			
		||||
	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
 | 
			
		||||
	github.com/jinzhu/inflection v1.0.0 // indirect
 | 
			
		||||
	github.com/jinzhu/now v1.1.5 // indirect
 | 
			
		||||
	github.com/json-iterator/go v1.1.12 // indirect
 | 
			
		||||
	github.com/klauspost/cpuid/v2 v2.2.10 // indirect
 | 
			
		||||
	github.com/leodido/go-urn v1.4.0 // indirect
 | 
			
		||||
	github.com/mattn/go-isatty v0.0.20 // indirect
 | 
			
		||||
	github.com/mattn/go-sqlite3 v1.14.22 // indirect
 | 
			
		||||
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 | 
			
		||||
	github.com/modern-go/reflect2 v1.0.2 // indirect
 | 
			
		||||
	github.com/pelletier/go-toml/v2 v2.2.4 // indirect
 | 
			
		||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
			
		||||
	github.com/ravener/discord-oauth2 v0.0.0-20230514095040-ae65713199b3 // indirect
 | 
			
		||||
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
 | 
			
		||||
	github.com/ugorji/go/codec v1.2.12 // indirect
 | 
			
		||||
	github.com/xyproto/randomstring v1.2.0 // indirect
 | 
			
		||||
	golang.org/x/arch v0.15.0 // indirect
 | 
			
		||||
	golang.org/x/crypto v0.36.0 // indirect
 | 
			
		||||
	golang.org/x/net v0.38.0 // indirect
 | 
			
		||||
	golang.org/x/oauth2 v0.29.0 // indirect
 | 
			
		||||
	golang.org/x/sys v0.31.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.23.0 // indirect
 | 
			
		||||
	google.golang.org/protobuf v1.36.6 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
	gorm.io/driver/sqlite v1.5.7 // indirect
 | 
			
		||||
)
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue