cpularp-manager-api/test/unit/tiertest/tiertest.go

247 lines
6.9 KiB
Go

package tiertest
import (
"encoding/json"
"fmt"
"os"
function "example.com/database/function"
functionset "example.com/database/functionset"
"example.com/database/functiontag"
tier "example.com/database/tier"
testrequest "example.com/test/testrequest"
testsetup "example.com/test/testsetup"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/suite"
"gorm.io/gorm"
)
type TestTier struct {
Result []tier.Tier `json:"result"`
}
type TierTestSuite struct {
suite.Suite
globalAuthHeader string
router *gin.Engine
tier tier.Tier
tierJSON []byte
tierUpdate tier.Tier
tierUpdateJSON []byte
}
func (s *TierTestSuite) SetupTestSuite() {
s.globalAuthHeader, s.router = testsetup.SetupTestSuite()
// Create Test Data
testFunctionTag1 := functiontag.FunctionTag{
Model: gorm.Model{ID: 1},
Name: "tag1",
}
testFunctionTag2 := functiontag.FunctionTag{
Model: gorm.Model{ID: 2},
Name: "tag2",
}
testFunctionTag3 := functiontag.FunctionTag{
Model: gorm.Model{ID: 3},
Name: "tag3",
}
testFunction1 := function.Function{
Model: gorm.Model{ID: 1},
Name: "function1",
Tags: []functiontag.FunctionTag{
testFunctionTag1,
testFunctionTag2,
},
Requirements: []function.Function{},
}
testFunction1JSON, _ := json.Marshal(function.FunctionParams{
Name: testFunction1.Name,
Tags: []uint{
testFunctionTag1.ID,
testFunctionTag2.ID,
},
Requirements: []uint{},
})
testFunction2 := function.Function{
Model: gorm.Model{ID: 2},
Name: "function2",
Tags: []functiontag.FunctionTag{},
Requirements: []function.Function{
testFunction1,
},
}
testFunction2JSON, _ := json.Marshal(function.FunctionParams{
Name: testFunction2.Name,
Tags: []uint{},
Requirements: []uint{
testFunction1.ID,
},
})
testFunction3 := function.Function{
Model: gorm.Model{ID: 3},
Name: "function3",
Tags: []functiontag.FunctionTag{
testFunctionTag2,
testFunctionTag3,
},
Requirements: []function.Function{
testFunction1,
testFunction2,
},
}
testFunction3JSON, _ := json.Marshal(function.FunctionParams{
Name: testFunction3.Name,
Tags: []uint{
testFunctionTag2.ID,
testFunctionTag3.ID,
},
Requirements: []uint{
testFunction1.ID,
testFunction2.ID,
},
})
testFunctionSet1 := functionset.FunctionSet{
Model: gorm.Model{ID: 1},
Functions: []function.Function{
testFunction1,
testFunction2,
},
}
testFunctionSet1JSON, _ := json.Marshal(functionset.FunctionSetParams{
Functions: []uint{
testFunction1.ID,
testFunction2.ID,
},
})
testFunctionSet2 := functionset.FunctionSet{
Model: gorm.Model{ID: 2},
Functions: []function.Function{
testFunction2,
testFunction3,
},
}
testFunctionSet2JSON, _ := json.Marshal(functionset.FunctionSetParams{
Functions: []uint{
testFunction2.ID,
testFunction3.ID,
},
})
// Set Test Variables
s.tier = tier.Tier{
Model: gorm.Model{ID: 1},
FunctionSets: []functionset.FunctionSet{
testFunctionSet1,
},
}
s.tierJSON, _ = json.Marshal(tier.TierParams{
FunctionSets: []uint{
testFunctionSet1.ID,
},
})
s.tierUpdate = tier.Tier{
Model: gorm.Model{ID: 1},
FunctionSets: []functionset.FunctionSet{
testFunctionSet2,
},
}
s.tierUpdateJSON, _ = json.Marshal(tier.TierParams{
FunctionSets: []uint{
testFunctionSet2.ID,
},
})
// Setup variables
var target string
var body []byte
target = "/function-tag"
// Setup variables
body, _ = json.Marshal(testFunctionTag1)
// Attempt to create function tag 1
testrequest.MakePostRequest(&body, target, s.globalAuthHeader, s.router)
// Setup variables
body, _ = json.Marshal(testFunctionTag2)
// Attempt to create function tag 2
testrequest.MakePostRequest(&body, target, s.globalAuthHeader, s.router)
// Setup variables
body, _ = json.Marshal(testFunctionTag3)
// Attempt to create function tag 3
testrequest.MakePostRequest(&body, target, s.globalAuthHeader, s.router)
target = "/function"
// Attempt to create function 1
testrequest.MakePostRequest(&testFunction1JSON, target, s.globalAuthHeader, s.router)
// Attempt to create function 2
testrequest.MakePostRequest(&testFunction2JSON, target, s.globalAuthHeader, s.router)
// Attempt to create function 3
testrequest.MakePostRequest(&testFunction3JSON, target, s.globalAuthHeader, s.router)
target = "/function-set"
// Attempt to create function set 1
testrequest.MakePostRequest(&testFunctionSet1JSON, target, s.globalAuthHeader, s.router)
// Attempt to create function set 2
testrequest.MakePostRequest(&testFunctionSet2JSON, target, s.globalAuthHeader, s.router)
}
func (s *TierTestSuite) TearDownTestSuite() {
os.Remove("db/main.db")
}
func (s *TierTestSuite) Test01CreateTier() {
// Setup variables
var output TestTier
target := fmt.Sprintf("/tier?id=%d", s.tier.ID)
// Attempt to create tier
status := testrequest.MakePostRequest(&s.tierJSON, "/tier", s.globalAuthHeader, s.router)
// Check that the request was successful
s.Equal(status, "200 OK", "function created successfully")
// Attempt to get tier
body := testrequest.MakeGetRequest(target, s.router)
json.Unmarshal(body, &output)
fmt.Println(string(body))
// Check that the tier listed matches the created tier
s.Equal(s.tier.FunctionSets[0].ID, output.Result[0].FunctionSets[0].ID, "input tier exists and function set id matches output function set id")
}
func (s *TierTestSuite) Test02GetTier() {
// Setup variables
var output TestTier
// Attempt to get tiers
body := testrequest.MakeGetRequest("/tier", s.router)
json.Unmarshal(body, &output)
// Check that the tiers listed match the created tiers
s.Equal(s.tier.FunctionSets[0].ID, output.Result[0].FunctionSets[0].ID, "input tier exists and function set id matches output function set id")
}
func (s *TierTestSuite) Test03UpdateTier() {
// Setup variables
var output TestTier
target := fmt.Sprintf("/tier?id=%d", s.tier.ID)
// Attempt to update tier
status := testrequest.MakePutRequest(&s.tierUpdateJSON, target, s.globalAuthHeader, s.router)
// Check that the request was successful
s.Equal(status, "200 OK", "tier created successfully")
// Attempt to get tier
body := testrequest.MakeGetRequest(target, s.router)
json.Unmarshal(body, &output)
// Check that the tier listed matches the updated function
s.Equal(s.tierUpdate.FunctionSets[0].ID, output.Result[0].FunctionSets[0].ID, "updated tier function set id matches output function set id")
}
func (s *TierTestSuite) Test04DeleteTier() {
// Setup variables
var output TestTier
target := fmt.Sprintf("/tier?id=%d", s.tier.ID)
// Attempt to delete tier
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 tier
body := testrequest.MakeGetRequest("/tier", s.router)
json.Unmarshal(body, &output)
// Check that the tier list is empty
s.Equal(0, len(output.Result), "tier list is empty")
}