Files
savy-test-playwright/tests/command-api.spec.ts
2026-01-19 08:54:54 +07:00

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()
})
}
}
})
})