Skip to content

Commit

Permalink
Add beginning of setup experience datastore tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dantecatalfamo committed Oct 1, 2024
1 parent 64f4313 commit 2cd5cd4
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 8 deletions.
7 changes: 0 additions & 7 deletions server/datastore/mysql/setup_experience.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"strings"

"github.com/fleetdm/fleet/v4/server/contexts/ctxerr"
"github.com/fleetdm/fleet/v4/server/contexts/viewer"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/jmoiron/sqlx"
)
Expand Down Expand Up @@ -110,18 +109,12 @@ func (ds *Datastore) ListSetupExperienceSoftwareTitles(ctx context.Context, team
opts.IncludeMetadata = true
opts.After = ""

vc, ok := viewer.FromContext(ctx)
if !ok {
return nil, 0, nil, fleet.ErrNoContext
}

titles, count, meta, err := ds.ListSoftwareTitles(ctx, fleet.SoftwareTitleListOptions{
TeamID: &teamID,
ListOptions: opts,
Platform: string(fleet.MacOSPlatform),
SetupExperienceOnly: true,
}, fleet.TeamFilter{
User: vc.User,
IncludeObserver: true,
TeamID: &teamID,
})
Expand Down
136 changes: 136 additions & 0 deletions server/datastore/mysql/setup_experience_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package mysql

import (
"bytes"
"context"
"testing"

"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/test"
"github.com/jmoiron/sqlx"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestSetupExperience(t *testing.T) {
ds := CreateMySQLDS(t)

cases := []struct {
name string
fn func(t *testing.T, ds *Datastore)
}{
{"GetSetupExperienceTitles", testGetSetupExperienceTitles},
}

for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
defer TruncateTables(t, ds)
c.fn(t, ds)
})
}
}

func testGetSetupExperienceTitles(t *testing.T, ds *Datastore) {
ctx := context.Background()
test.CreateInsertGlobalVPPToken(t, ds)

team1, err := ds.NewTeam(ctx, &fleet.Team{Name: "team1"})
require.NoError(t, err)
team2, err := ds.NewTeam(ctx, &fleet.Team{Name: "team2"})
require.NoError(t, err)

user1 := test.NewUser(t, ds, "Alice", "alice@example.com", true)

installerID1, err := ds.MatchOrCreateSoftwareInstaller(ctx, &fleet.UploadSoftwareInstallerPayload{
InstallScript: "hello",
PreInstallQuery: "SELECT 1",
PostInstallScript: "world",
UninstallScript: "goodbye",
InstallerFile: bytes.NewReader([]byte("hello")),
StorageID: "storage1",
Filename: "file1",
Title: "file1",
Version: "1.0",
Source: "apps",
UserID: user1.ID,
TeamID: &team1.ID,
Platform: string(fleet.MacOSPlatform),
})
require.NoError(t, err)

installerID2, err := ds.MatchOrCreateSoftwareInstaller(ctx, &fleet.UploadSoftwareInstallerPayload{
InstallScript: "world",
PreInstallQuery: "SELECT 2",
PostInstallScript: "hello",
InstallerFile: bytes.NewReader([]byte("hello")),
StorageID: "storage2",
Filename: "file2",
Title: "file2",
Version: "2.0",
Source: "apps",
UserID: user1.ID,
TeamID: &team1.ID,
Platform: string(fleet.MacOSPlatform),
})
_ = installerID2
require.NoError(t, err)

installerID3, err := ds.MatchOrCreateSoftwareInstaller(ctx, &fleet.UploadSoftwareInstallerPayload{
InstallScript: "banana",
PreInstallQuery: "SELECT 3",
PostInstallScript: "apple",
InstallerFile: bytes.NewReader([]byte("hello")),
StorageID: "storage3",
Filename: "file3",
Title: "file3",
Version: "3.0",
Source: "apps",
SelfService: true,
UserID: user1.ID,
TeamID: &team2.ID,
Platform: string(fleet.MacOSPlatform),
})
require.NoError(t, err)

installerID4, err := ds.MatchOrCreateSoftwareInstaller(ctx, &fleet.UploadSoftwareInstallerPayload{
InstallScript: "pear",
PreInstallQuery: "SELECT 4",
PostInstallScript: "apple",
InstallerFile: bytes.NewReader([]byte("hello2")),
StorageID: "storage3",
Filename: "file4",
Title: "file4",
Version: "4.0",
Source: "apps",
SelfService: true,
UserID: user1.ID,
TeamID: &team2.ID,
Platform: string(fleet.IOSPlatform),
})
require.NoError(t, err)

titles, count, meta, err := ds.ListSetupExperienceSoftwareTitles(ctx, team1.ID, fleet.ListOptions{})
require.NoError(t, err)
assert.Len(t, titles, 0)
assert.Equal(t, 0, count)
assert.NotNil(t, meta)

ExecAdhocSQL(t, ds, func(q sqlx.ExtContext) error {
_, err := q.ExecContext(ctx, "UPDATE software_installers SET install_during_setup = 1 WHERE id IN (?, ?, ?)", installerID1, installerID3, installerID4)
return err
})

titles, count, meta, err = ds.ListSetupExperienceSoftwareTitles(ctx, team1.ID, fleet.ListOptions{})
require.NoError(t, err)
assert.Len(t, titles, 1)
assert.Equal(t, installerID1, titles[0].ID)
assert.Equal(t, 1, count)
assert.NotNil(t, meta)

titles, count, meta, err = ds.ListSetupExperienceSoftwareTitles(ctx, team2.ID, fleet.ListOptions{})
require.NoError(t, err)
assert.Len(t, titles, 1)
assert.Equal(t, installerID3, titles[0].ID)
assert.Equal(t, 1, count)
assert.NotNil(t, meta)
}
2 changes: 1 addition & 1 deletion server/datastore/mysql/software_titles.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ GROUP BY st.id, package_self_service, package_name, package_version, package_url
}

if opt.SetupExperienceOnly {
defaultFilter += ` AND ( si.install_during_setup OR vat.install_during_setup )`
defaultFilter += ` AND ( si.install_during_setup = 1 OR vat.install_during_setup = 1 )`
}

if opt.Platform != "" {
Expand Down

0 comments on commit 2cd5cd4

Please sign in to comment.