78 lines
2.7 KiB
TypeScript
78 lines
2.7 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
import topics from '../topic.json'
|
|
|
|
test.describe('Savy API Automation', () => {
|
|
|
|
// Helper to determine payload
|
|
const getPayload = (deviceName: string) => {
|
|
if (deviceName === 'AC') return 'AC=On'
|
|
if (deviceName === 'BL') return 'Bind=Open'
|
|
if (deviceName === 'DL') return 'Doorlock=Lock'
|
|
return null
|
|
}
|
|
|
|
test.describe('1. Command API Tests', () => {
|
|
for (const item of topics) {
|
|
const { towerNumber, floorName, unitNumber, deviceName, deviceRoom, deviceType } = item
|
|
const payload = getPayload(deviceName)
|
|
|
|
if (payload) {
|
|
const topic = `SAVY/${floorName}_${unitNumber}-${deviceName}-${deviceRoom}-${deviceType}-C-${towerNumber}`
|
|
|
|
test(`Send command for ${deviceName} - ${topic}`, async ({ request }) => {
|
|
const requestData = { topic, payload }
|
|
|
|
console.log(`[Command] Request: ${JSON.stringify(requestData, null, 2)}`)
|
|
|
|
const response = await request.post('http://savy.vegacloud.id/command', {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': 'Basic e3thdXRodXNlckhUVFB9fTp7e2F1dGhwd2RIVFRQfX0=',
|
|
},
|
|
data: requestData
|
|
})
|
|
|
|
const responseBody = await response.json()
|
|
console.log(`[Command] Response Status: ${response.status()}`)
|
|
console.log(`[Command] Response Body: ${JSON.stringify(responseBody, null, 2)}`)
|
|
console.log('---')
|
|
|
|
expect(response.status()).toBe(200)
|
|
})
|
|
}
|
|
}
|
|
})
|
|
|
|
test.describe('2. State Reply API Tests', () => {
|
|
for (const item of topics) {
|
|
const { towerNumber, floorName, unitNumber, deviceName, deviceRoom, deviceType } = item
|
|
const payload = getPayload(deviceName)
|
|
|
|
if (payload) {
|
|
const topic = `SAVY/${floorName}_${unitNumber}-${deviceName}-${deviceRoom}-${deviceType}-S-${towerNumber}`
|
|
|
|
test(`Check state for ${deviceName} - ${topic}`, async ({ request }) => {
|
|
const requestData = { topic }
|
|
|
|
console.log(`[State Reply] Request: ${JSON.stringify(requestData, null, 2)}`)
|
|
|
|
const response = await request.post('http://savy.vegacloud.id/state-reply', {
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
data: requestData
|
|
})
|
|
|
|
const responseBody = await response.json()
|
|
console.log(`[State Reply] Response Status: ${response.status()}`)
|
|
console.log(`[State Reply] Response Body: ${JSON.stringify(responseBody, null, 2)}`)
|
|
console.log('---')
|
|
|
|
expect(response.status()).toBe(200)
|
|
expect(responseBody.data).not.toBeNull()
|
|
})
|
|
}
|
|
}
|
|
})
|
|
})
|