test: partial coverage state (#9)

* build: add test + coverage tooling

* ci: run tests on ci

* test: partial coverage for state utils
This commit is contained in:
Marc 2023-11-08 00:23:44 -05:00 committed by GitHub
parent 096c7b37ef
commit 9d144d7ddc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 92 additions and 0 deletions

View file

@ -7,6 +7,15 @@ on:
- main
jobs:
tests:
name: "Tests"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
with:
go-version: '1.21'
- run: . scripts/test
integration-tests:
name: "Integration tests"
runs-on: ubuntu-latest

6
go.mod
View file

@ -1,3 +1,9 @@
module v
go 1.21.1
require (
golang.org/x/sys v0.4.0 // indirect
golang.org/x/tools v0.5.1-0.20230111220935-a7f7db3f17fc // indirect
golang.org/x/tools/cmd/cover v0.1.0-deprecated // indirect
)

6
go.sum Normal file
View file

@ -0,0 +1,6 @@
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/tools v0.5.1-0.20230111220935-a7f7db3f17fc h1:zRn9MzwG18RZhyanShCfUwJTcobvqw8fOjjROFN9jtM=
golang.org/x/tools v0.5.1-0.20230111220935-a7f7db3f17fc/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k=
golang.org/x/tools/cmd/cover v0.1.0-deprecated h1:Rwy+mWYz6loAF+LnG1jHG/JWMHRMMC2/1XX3Ejkx9lA=
golang.org/x/tools/cmd/cover v0.1.0-deprecated/go.mod h1:hMDiIvlpN1NoVgmjLjUJE9tMHyxHjFX7RuQ+rW12mSA=

4
scripts/test Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
go get golang.org/x/tools/cmd/cover
go test -cover -v

67
state_test.go Normal file
View file

@ -0,0 +1,67 @@
package main
import (
"encoding/json"
"io/ioutil"
"os"
"path"
"testing"
)
// If an override is provided via V_ROOT, it's used as state path.
func TestGetStatePathUsesEnvVRootOverride(t *testing.T) {
MOCK_ROOT_PATH := "/overriden_path_to_state"
os.Setenv("V_ROOT", MOCK_ROOT_PATH)
defer os.Unsetenv("V_ROOT")
if statePath := GetStatePath(); statePath != MOCK_ROOT_PATH {
t.Errorf("Did not find expected state path %s, found %s instead.", MOCK_ROOT_PATH, statePath)
}
}
// If no override is provided via V_ROOT, $HOME/.v is used.
func TestGetStatePathUsesHomeDefaultIfNoOverride(t *testing.T) {
home, _ := os.UserHomeDir()
expected := path.Join(home, ".v")
if statePath := GetStatePath(); statePath != expected {
t.Errorf("Did not find expected state path %s, found %s instead.", expected, statePath)
}
}
// State is read from the state path and returned by ReadState.
func TestReadStateReadsStateAtPath(t *testing.T) {
tempFolder, _ := os.MkdirTemp("", "v_test")
defer os.RemoveAll(tempFolder)
os.Setenv("V_ROOT", tempFolder)
defer os.Unsetenv("V_ROOT")
mockState := State{GlobalVersion: "1.0.0"}
statePath := GetStatePath("state.json")
stateData, _ := json.Marshal(mockState)
ioutil.WriteFile(statePath, stateData, 0750)
readState := ReadState()
if readState != mockState {
t.Errorf("Did not find expected state. %v != %v", mockState, readState)
}
}
func TestWriteStateWritesAtPath(t *testing.T) {
tempFolder, _ := os.MkdirTemp("", "v_test")
defer os.RemoveAll(tempFolder)
os.Setenv("V_ROOT", tempFolder)
defer os.Unsetenv("V_ROOT")
mockState := State{GlobalVersion: "2.0.0"}
WriteState(mockState.GlobalVersion)
statePath := GetStatePath("state.json")
readState := State{}
bytes, _ := ioutil.ReadFile(statePath)
json.Unmarshal(bytes, &readState)
if readState != mockState {
t.Errorf("Did not find expected state. %v != %v", mockState, readState)
}
}