feat: list host software integration tests (#20632)

> Related issue: #20229

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

<!-- Note that API documentation changes are now addressed by the
product design team. -->

- [x] Added/updated tests
- [x] Manual QA for all new/changed functionality
This commit is contained in:
Jahziel Villasana-Espinoza 2024-07-22 16:11:07 -04:00 committed by GitHub
parent bbe7b0225b
commit 746c442d01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9776,12 +9776,20 @@ func (s *integrationMDMTestSuite) TestVPPApps() {
addedApp = appResp.AppStoreApps[0]
addAppResp = addAppStoreAppResponse{}
s.DoJSON("POST", "/api/latest/fleet/software/app_store_apps", &addAppStoreAppRequest{TeamID: &team.ID, AppStoreID: addedApp.AdamID}, http.StatusOK, &addAppResp)
s.lastActivityMatches(fleet.ActivityAddedAppStoreApp{}.ActivityName(), fmt.Sprintf(`{"team_name": "%s", "software_title": "%s", "app_store_id": "%s", "team_id": %d}`, team.Name, addedApp.Name, addedApp.AdamID, team.ID), 0)
s.lastActivityMatches(
fleet.ActivityAddedAppStoreApp{}.ActivityName(),
fmt.Sprintf(`{"team_name": "%s", "software_title": "%s", "app_store_id": "%s", "team_id": %d}`, team.Name, addedApp.Name, addedApp.AdamID, team.ID),
0,
)
errApp := appResp.AppStoreApps[1]
addAppResp = addAppStoreAppResponse{}
s.DoJSON("POST", "/api/latest/fleet/software/app_store_apps", &addAppStoreAppRequest{TeamID: &team.ID, AppStoreID: errApp.AdamID}, http.StatusOK, &addAppResp)
s.lastActivityMatches(fleet.ActivityAddedAppStoreApp{}.ActivityName(), fmt.Sprintf(`{"team_name": "%s", "software_title": "%s", "app_store_id": "%s", "team_id": %d}`, team.Name, errApp.Name, errApp.AdamID, team.ID), 0)
s.lastActivityMatches(
fleet.ActivityAddedAppStoreApp{}.ActivityName(),
fmt.Sprintf(`{"team_name": "%s", "software_title": "%s", "app_store_id": "%s", "team_id": %d}`, team.Name, errApp.Name, errApp.AdamID, team.ID),
0,
)
listSw = listSoftwareTitlesResponse{}
s.DoJSON("GET", "/api/latest/fleet/software/titles", nil, http.StatusOK, &listSw, "team_id", fmt.Sprint(team.ID), "available_for_install", "true")
@ -9813,7 +9821,19 @@ func (s *integrationMDMTestSuite) TestVPPApps() {
}
}
s.lastActivityMatches(fleet.ActivityInstalledAppStoreApp{}.ActivityName(), fmt.Sprintf(`{"host_id": %d, "host_display_name": "%s", "software_title": "%s", "app_store_id": "%s", "command_uuid": "%s", "status": "%s"}`, mdmHost.ID, mdmHost.DisplayName(), errApp.Name, errApp.AdamID, cmdUUID, fleet.SoftwareInstallerFailed), 0)
s.lastActivityMatches(
fleet.ActivityInstalledAppStoreApp{}.ActivityName(),
fmt.Sprintf(
`{"host_id": %d, "host_display_name": "%s", "software_title": "%s", "app_store_id": "%s", "command_uuid": "%s", "status": "%s"}`,
mdmHost.ID,
mdmHost.DisplayName(),
errApp.Name,
errApp.AdamID,
cmdUUID,
fleet.SoftwareInstallerFailed,
),
0,
)
// Trigger install to the host
installResp = installSoftwareResponse{}
@ -9833,7 +9853,58 @@ func (s *integrationMDMTestSuite) TestVPPApps() {
}
}
s.lastActivityMatches(fleet.ActivityInstalledAppStoreApp{}.ActivityName(), fmt.Sprintf(`{"host_id": %d, "host_display_name": "%s", "software_title": "%s", "app_store_id": "%s", "command_uuid": "%s", "status": "%s"}`, mdmHost.ID, mdmHost.DisplayName(), addedApp.Name, addedApp.AdamID, cmdUUID, fleet.SoftwareInstallerInstalled), 0)
s.lastActivityMatches(
fleet.ActivityInstalledAppStoreApp{}.ActivityName(),
fmt.Sprintf(
`{"host_id": %d, "host_display_name": "%s", "software_title": "%s", "app_store_id": "%s", "command_uuid": "%s", "status": "%s"}`,
mdmHost.ID,
mdmHost.DisplayName(),
addedApp.Name,
addedApp.AdamID,
cmdUUID,
fleet.SoftwareInstallerInstalled,
),
0,
)
// Check list host software
getHostSw := getHostSoftwareResponse{}
s.DoJSON("GET", fmt.Sprintf("/api/latest/fleet/hosts/%d/software", mdmHost.ID), nil, http.StatusOK, &getHostSw)
gotSW := getHostSw.Software
require.Len(t, gotSW, 2) // App 1 and App 2
got1, got2 := gotSW[0], gotSW[1]
require.Equal(t, got1.Name, "App 1")
require.NotNil(t, got1.AppStoreApp)
require.Equal(t, got1.AppStoreApp.AppStoreID, addedApp.AdamID)
require.Equal(t, got1.AppStoreApp.IconURL, ptr.String(addedApp.IconURL))
require.Empty(t, got1.AppStoreApp.Name) // Name is only present for installer packages
require.Equal(t, got1.AppStoreApp.Version, addedApp.LatestVersion)
require.NotNil(t, *got1.Status)
require.Equal(t, *got1.Status, fleet.SoftwareInstallerInstalled)
require.Equal(t, got2.Name, "App 2")
require.NotNil(t, *got2.Status)
require.Equal(t, *got2.Status, fleet.SoftwareInstallerFailed)
require.NotNil(t, got2.AppStoreApp)
require.Equal(t, got2.AppStoreApp.AppStoreID, errApp.AdamID)
require.Equal(t, got2.AppStoreApp.IconURL, ptr.String(errApp.IconURL))
require.Empty(t, got2.AppStoreApp.Name)
require.Equal(t, got2.AppStoreApp.Version, errApp.LatestVersion)
// Check with a query
getHostSw = getHostSoftwareResponse{}
s.DoJSON("GET", fmt.Sprintf("/api/latest/fleet/hosts/%d/software", mdmHost.ID), nil, http.StatusOK, &getHostSw, "query", "App 1")
require.Len(t, getHostSw.Software, 1) // App 1 only
got1 = getHostSw.Software[0]
require.Equal(t, got1.Name, "App 1")
require.NotNil(t, got1.AppStoreApp)
require.NotNil(t, got1.AppStoreApp)
require.Equal(t, got1.AppStoreApp.AppStoreID, addedApp.AdamID)
require.Equal(t, got1.AppStoreApp.IconURL, ptr.String(addedApp.IconURL))
require.Empty(t, got1.AppStoreApp.Name)
require.Equal(t, got1.AppStoreApp.Version, addedApp.LatestVersion)
require.NotNil(t, *got1.Status)
require.Equal(t, *got1.Status, fleet.SoftwareInstallerInstalled)
// Delete VPP token and check that it's not appearing anymore
s.Do("DELETE", "/api/latest/fleet/mdm/apple/vpp_token", &deleteMDMAppleVPPTokenRequest{}, http.StatusNoContent)