Skip to content

Commit

Permalink
[#222] refactor onlineData api field
Browse files Browse the repository at this point in the history
  • Loading branch information
pzadroga committed Oct 24, 2024
1 parent 04ac780 commit 55cb7df
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 25 deletions.
9 changes: 7 additions & 2 deletions api/swagger.in.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,11 @@ definitions:
type: array
items:
type: string

VersionsDataSource:
type: string
enum: &VERSIONSDATASOURCE
- "offline"

AppsVersions:
type: object
Expand All @@ -164,8 +169,8 @@ definitions:
date:
type: string
format: date
onlineData:
type: boolean
dataSource:
enum: *VERSIONSDATASOURCE

ApiError:
type: object
Expand Down
2 changes: 1 addition & 1 deletion backend/server/restservice/machines.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func (r *RestAPI) GetSoftwareVersions(ctx context.Context, params general.GetSof
Stork: stork,
}

appsVersions.OnlineData = onlineData
appsVersions.DataSource = "offline"

return general.NewGetSoftwareVersionsOK().WithPayload(&appsVersions)
}
Expand Down
3 changes: 2 additions & 1 deletion backend/server/restservice/machines_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3253,7 +3253,8 @@ func TestGetSoftwareVersions(t *testing.T) {
okRsp, ok := rsp.(*general.GetSoftwareVersionsOK)
require.True(t, ok)
require.Equal(t, "2024-10-03", okRsp.Payload.Date.String())
require.Empty(t, okRsp.Payload.OnlineData)
require.NotNil(t, okRsp.Payload.DataSource)
require.Equal(t, "offline", okRsp.Payload.DataSource)
require.NotNil(t, okRsp.Payload.Bind9)
require.NotNil(t, okRsp.Payload.Kea)
require.NotNil(t, okRsp.Payload.Stork)
Expand Down
10 changes: 6 additions & 4 deletions webui/src/app/version-page/version-page.component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { ButtonModule } from 'primeng/button'
import { RouterModule } from '@angular/router'
import { Severity, VersionAlert, VersionService } from '../version.service'
import { of } from 'rxjs'
import { ServicesService } from '../backend'
import { AppsVersions, ServicesService } from '../backend'
import { MessagesModule } from 'primeng/messages'
import { BadgeModule } from 'primeng/badge'
import { By } from '@angular/platform-browser'
Expand All @@ -26,7 +26,7 @@ describe('VersionPageComponent', () => {
let servicesApi: ServicesService
let getCurrentDataSpy: jasmine.Spy<any>
let getDataManufactureDateSpy: jasmine.Spy<any>
let isOnlineDataSpy: jasmine.Spy<any>
let getDataSourceSpy: jasmine.Spy<any>
let getVersionAlertSpy: jasmine.Spy<any>
let getMachinesAppsVersionsSpy: jasmine.Spy<any>
let messageService: MessageService
Expand Down Expand Up @@ -272,7 +272,9 @@ describe('VersionPageComponent', () => {
component = fixture.componentInstance
getCurrentDataSpy = spyOn(versionService, 'getCurrentData')
getDataManufactureDateSpy = spyOn(versionService, 'getDataManufactureDate').and.returnValue(of('2024-10-03'))
isOnlineDataSpy = spyOn(versionService, 'isOnlineData').and.returnValue(of(false))
getDataSourceSpy = spyOn(versionService, 'getDataSource').and.returnValue(
of(AppsVersions.DataSourceEnum.Offline)
)
getVersionAlertSpy = spyOn(versionService, 'getVersionAlert')
getVersionAlertSpy.and.returnValue(of({ severity: Severity.error, detected: true } as VersionAlert))
getMachinesAppsVersionsSpy = spyOn(servicesApi, 'getMachinesAppsVersions')
Expand Down Expand Up @@ -321,7 +323,7 @@ describe('VersionPageComponent', () => {
// Arrange & Act & Assert
apisWorkingFine()
expect(getDataManufactureDateSpy).toHaveBeenCalledTimes(1)
expect(isOnlineDataSpy).toHaveBeenCalledTimes(1)
expect(getDataSourceSpy).toHaveBeenCalledTimes(1)
expect(getCurrentDataSpy).toHaveBeenCalledTimes(1)
expect(getMachinesAppsVersionsSpy).toHaveBeenCalledTimes(1)

Expand Down
4 changes: 3 additions & 1 deletion webui/src/app/version-page/version-page.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,9 @@ export class VersionPageComponent implements OnInit, OnDestroy {
*/
ngOnInit(): void {
this.dataDate$ = this.versionService.getDataManufactureDate()
this.isOfflineData$ = this.versionService.isOnlineData().pipe(map((b) => !b))
this.isOfflineData$ = this.versionService
.getDataSource()
.pipe(map((b) => b === AppsVersions.DataSourceEnum.Offline))
this.showAlert$ = this.versionService.getVersionAlert().pipe(
map((a) => {
return a.detected
Expand Down
25 changes: 13 additions & 12 deletions webui/src/app/version.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ describe('VersionService', () => {
let service: VersionService
let generalService: GeneralService
let getSwVersionsSpy: jasmine.Spy<any>
let fakeResponse = {
let fakeResponse: AppsVersions = {
bind9: {
currentStable: [
{
Expand All @@ -35,6 +35,7 @@ describe('VersionService', () => {
latestDev: { major: 9, minor: 21, releaseDate: '2024-09-18', status: 'Development', version: '9.21.1' },
sortedStableVersions: ['9.18.30', '9.20.2'],
},
dataSource: 'offline',
date: '2024-10-03',
kea: {
currentStable: [
Expand Down Expand Up @@ -116,9 +117,9 @@ describe('VersionService', () => {
expect(res1).toBeTruthy()
expect(res2).toBeTruthy()
expect(res3).toBeTruthy()
expect(res1).toEqual(fakeResponse)
expect(res2).toEqual(fakeResponse)
expect(res3).toEqual(fakeResponse)
expect(JSON.stringify(res1)).toEqual(JSON.stringify(fakeResponse))
expect(JSON.stringify(res2)).toEqual(JSON.stringify(fakeResponse))
expect(JSON.stringify(res3)).toEqual(JSON.stringify(fakeResponse))
})

it('should query api when data refresh is forced', () => {
Expand All @@ -135,7 +136,7 @@ describe('VersionService', () => {
// Assert
expect(getSwVersionsSpy).toHaveBeenCalledTimes(2)
expect(response).toBeTruthy()
expect(response).toEqual(fakeResponse)
expect(JSON.stringify(response)).toEqual(JSON.stringify(fakeResponse))
})

it('should refresh outdated data', () => {
Expand Down Expand Up @@ -168,9 +169,9 @@ describe('VersionService', () => {
expect(res1).toBeTruthy()
expect(res2).toBeTruthy()
expect(res3).toBeTruthy()
expect(res1).toEqual(fakeResponse)
expect(res2).toEqual(fakeResponse)
expect(res3).toEqual(fakeResponse)
expect(JSON.stringify(res1)).toEqual(JSON.stringify(fakeResponse))
expect(JSON.stringify(res2)).toEqual(JSON.stringify(fakeResponse))
expect(JSON.stringify(res3)).toEqual(JSON.stringify(fakeResponse))
})

it('should return data manufacture date', () => {
Expand All @@ -191,18 +192,18 @@ describe('VersionService', () => {

it('should return online data flag', () => {
// Arrange
let response: boolean
let response: string

// Act
service
.isOnlineData()
.getDataSource()
.subscribe((d) => (response = d))
.unsubscribe()

// Assert
expect(getSwVersionsSpy).toHaveBeenCalledTimes(1)
expect(response).not.toBeNull()
expect(response).toBeFalse()
expect(response).toBeTruthy()
expect(response).toEqual(AppsVersions.DataSourceEnum.Offline)
})

it('should sanitize semver', () => {
Expand Down
8 changes: 4 additions & 4 deletions webui/src/app/version.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,12 @@ export class VersionService {
}

/**
* Returns an Observable of the boolean stating whether current software versions data provided by the backend
* Returns an Observable of the versions data source stating whether current data provided by the backend
* origins from online sources (e.g. ISC GitLab REST api) or from offline data stored in versions.json file.
* @return true if data comes from online fetching; false otherwise
* @return DataSourceEnum Observable
*/
isOnlineData(): Observable<boolean> {
return this.currentData$.pipe(map((data) => !!data.onlineData))
getDataSource(): Observable<AppsVersions.DataSourceEnum> {
return this.currentData$.pipe(map((data) => data.dataSource))
}

/**
Expand Down

0 comments on commit 55cb7df

Please sign in to comment.