2022-04-14 01:27:39 +00:00
package cli
import (
2022-05-02 20:07:15 +00:00
"math"
2023-12-06 19:37:33 +00:00
"os"
2022-04-14 01:27:39 +00:00
"testing"
"github.com/MarvinJWendt/testza"
)
2023-12-06 03:01:49 +00:00
func profilesGetResolver ( ) DependencyResolver {
2022-10-14 16:11:16 +00:00
ctx , err := InitCLI ( false )
2023-12-06 03:01:49 +00:00
if err != nil {
panic ( err )
}
2022-05-02 20:07:15 +00:00
2023-12-06 04:47:41 +00:00
return NewDependencyResolver ( ctx . Provider )
2023-12-06 03:01:49 +00:00
}
func TestProfileResolution ( t * testing . T ) {
resolver := profilesGetResolver ( )
2022-04-14 01:27:39 +00:00
resolved , err := ( & Profile {
Name : DefaultProfileName ,
Mods : map [ string ] ProfileMod {
"RefinedPower" : {
Version : "3.0.9" ,
2022-05-02 20:07:15 +00:00
Enabled : true ,
2022-04-14 01:27:39 +00:00
} ,
} ,
2022-05-02 20:07:15 +00:00
} ) . Resolve ( resolver , nil , math . MaxInt )
2022-04-14 01:27:39 +00:00
testza . AssertNoError ( t , err )
testza . AssertNotNil ( t , resolved )
2022-05-02 20:07:15 +00:00
testza . AssertLen ( t , resolved , 4 )
2023-12-06 03:01:49 +00:00
}
func TestProfileRequiredOlderVersion ( t * testing . T ) {
resolver := profilesGetResolver ( )
2022-04-14 01:27:39 +00:00
2023-12-06 03:01:49 +00:00
_ , err := ( & Profile {
2022-04-14 01:27:39 +00:00
Name : DefaultProfileName ,
Mods : map [ string ] ProfileMod {
"RefinedPower" : {
Version : "3.0.9" ,
2022-05-02 20:07:15 +00:00
Enabled : true ,
2022-04-14 01:27:39 +00:00
} ,
"RefinedRDLib" : {
Version : "1.0.6" ,
2022-05-02 20:07:15 +00:00
Enabled : true ,
2022-04-14 01:27:39 +00:00
} ,
} ,
2022-05-02 20:07:15 +00:00
} ) . Resolve ( resolver , nil , math . MaxInt )
2022-04-14 01:27:39 +00:00
2023-12-06 03:01:49 +00:00
testza . AssertEqual ( t , "failed resolving profile dependencies: failed to solve dependencies: Because installing Refined Power (RefinedPower) \"3.0.9\" and Refined Power (RefinedPower) \"3.0.9\" depends on RefinedRDLib \"^1.0.7\", installing RefinedRDLib \"^1.0.7\".\nSo, because installing RefinedRDLib \"1.0.6\", version solving failed." , err . Error ( ) )
}
func TestResolutionNonExistentMod ( t * testing . T ) {
resolver := profilesGetResolver ( )
2022-04-14 01:27:39 +00:00
2023-12-06 03:01:49 +00:00
_ , err := ( & Profile {
2022-04-14 01:27:39 +00:00
Name : DefaultProfileName ,
Mods : map [ string ] ProfileMod {
"ThisModDoesNotExist$$$" : {
Version : ">0.0.0" ,
2022-05-02 20:07:15 +00:00
Enabled : true ,
2022-04-14 01:27:39 +00:00
} ,
} ,
2022-05-02 20:07:15 +00:00
} ) . Resolve ( resolver , nil , math . MaxInt )
2022-04-14 01:27:39 +00:00
2023-12-06 03:01:49 +00:00
testza . AssertEqual ( t , "failed resolving profile dependencies: failed to solve dependencies: failed to make decision: failed to get package versions: mod ThisModDoesNotExist$$$ not found" , err . Error ( ) )
2022-04-14 01:27:39 +00:00
}
2023-12-06 19:37:33 +00:00
func TestUpdateMods ( t * testing . T ) {
ctx , err := InitCLI ( false )
testza . AssertNoError ( t , err )
err = ctx . Wipe ( )
testza . AssertNoError ( t , err )
resolver := NewDependencyResolver ( ctx . Provider )
oldLockfile , err := ( & Profile {
Name : DefaultProfileName ,
Mods : map [ string ] ProfileMod {
"AreaActions" : {
Version : "1.6.5" ,
Enabled : true ,
} ,
} ,
} ) . Resolve ( resolver , nil , math . MaxInt )
testza . AssertNoError ( t , err )
testza . AssertNotNil ( t , oldLockfile )
testza . AssertLen ( t , oldLockfile , 2 )
profileName := "UpdateTest"
profile , err := ctx . Profiles . AddProfile ( profileName )
testza . AssertNoError ( t , err )
testza . AssertNoError ( t , profile . AddMod ( "AreaActions" , "<=1.6.6" ) )
serverLocation := os . Getenv ( "SF_DEDICATED_SERVER" )
if serverLocation != "" {
installation , err := ctx . Installations . AddInstallation ( ctx , serverLocation , profileName )
testza . AssertNoError ( t , err )
testza . AssertNotNil ( t , installation )
err = installation . WriteLockFile ( ctx , oldLockfile )
testza . AssertNoError ( t , err )
err = installation . Install ( ctx , nil )
testza . AssertNoError ( t , err )
lockFile , err := installation . LockFile ( ctx )
testza . AssertNoError ( t , err )
testza . AssertEqual ( t , 2 , len ( * lockFile ) )
testza . AssertEqual ( t , "1.6.5" , ( * lockFile ) [ "AreaActions" ] . Version )
err = installation . UpdateMods ( ctx , [ ] string { "AreaActions" } )
testza . AssertNoError ( t , err )
lockFile , err = installation . LockFile ( ctx )
testza . AssertNoError ( t , err )
testza . AssertEqual ( t , 2 , len ( * lockFile ) )
testza . AssertEqual ( t , "1.6.6" , ( * lockFile ) [ "AreaActions" ] . Version )
err = installation . Install ( ctx , nil )
testza . AssertNoError ( t , err )
}
}