mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Scenario test fetching auth token
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import { createClientAsync } from "soap";
|
||||
import { createClientAsync, Client } from "soap";
|
||||
import { Express } from "express";
|
||||
|
||||
import request from "supertest";
|
||||
|
||||
import { GetAppLinkResult } from "../src/smapi";
|
||||
import { GetAppLinkResult, GetDeviceAuthTokenResult } from "../src/smapi";
|
||||
import { getAppLinkMessage } from "./builders";
|
||||
import { InMemoryMusicService } from "./in_memory_music_service";
|
||||
import { InMemoryLinkCodes } from "../src/link_codes";
|
||||
@@ -12,6 +12,16 @@ import makeServer from "../src/server";
|
||||
import { Service, bonobService, SONOS_DISABLED } from "../src/sonos";
|
||||
import supersoap from "./supersoap";
|
||||
|
||||
class FooDriver {
|
||||
client: Client;
|
||||
token: GetDeviceAuthTokenResult;
|
||||
|
||||
constructor(client: Client, token: GetDeviceAuthTokenResult) {
|
||||
this.client = client;
|
||||
this.token = token;
|
||||
}
|
||||
}
|
||||
|
||||
class SonosDriver {
|
||||
server: Express;
|
||||
rootUrl: string;
|
||||
@@ -36,11 +46,12 @@ class SonosDriver {
|
||||
.get(this.stripServiceRoot(this.service.presentation.uri!))
|
||||
.expect(200);
|
||||
|
||||
return createClientAsync(`${this.service.uri}?wsdl`, {
|
||||
const client = await createClientAsync(`${this.service.uri}?wsdl`, {
|
||||
endpoint: this.service.uri,
|
||||
httpClient: supersoap(this.server, this.rootUrl),
|
||||
}).then((client) =>
|
||||
client
|
||||
});
|
||||
|
||||
return client
|
||||
.getAppLinkAsync(getAppLinkMessage())
|
||||
.then(
|
||||
([result]: [GetAppLinkResult]) =>
|
||||
@@ -48,25 +59,30 @@ class SonosDriver {
|
||||
)
|
||||
.then(({ regUrl, linkCode }: { regUrl: string; linkCode: string }) => ({
|
||||
login: async ({ username, password }: Credentials) => {
|
||||
await request(this.server).get(this.stripServiceRoot(regUrl)).expect(200);
|
||||
await request(this.server)
|
||||
.get(this.stripServiceRoot(regUrl))
|
||||
.expect(200);
|
||||
|
||||
return request(this.server)
|
||||
.post(this.stripServiceRoot(regUrl))
|
||||
.type("form")
|
||||
.send({ username, password, linkCode })
|
||||
.then(response => ({
|
||||
expectSuccess: () => {
|
||||
.then((response) => ({
|
||||
expectSuccess: async () => {
|
||||
expect(response.status).toEqual(200);
|
||||
expect(response.text).toContain("Login successful")
|
||||
expect(response.text).toContain("Login successful");
|
||||
|
||||
return client
|
||||
.getDeviceAuthTokenAsync({ linkCode })
|
||||
.then((authToken: [GetDeviceAuthTokenResult, any]) => new FooDriver(client, authToken[0]));
|
||||
},
|
||||
expectFailure: () => {
|
||||
expect(response.status).toEqual(403);
|
||||
expect(response.text).toContain("Login failed")
|
||||
expect(response.text).toContain("Login failed");
|
||||
},
|
||||
}));
|
||||
},
|
||||
}))
|
||||
);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user