Added implementation of setLocations along with tests

This commit is contained in:
Alexander Cerutti
2021-09-19 20:09:32 +02:00
parent 8a814e46f0
commit 59efe84bc8
2 changed files with 73 additions and 5 deletions

View File

@@ -45,4 +45,54 @@ describe("PKPass", () => {
expect(pass.props["beacons"].length).toBe(1); expect(pass.props["beacons"].length).toBe(1);
}); });
}); });
describe("setLocations", () => {
it("should reset instance.props['locations'] if 'null' is passed as value", () => {
const pass = new PKPass({}, {});
pass.setLocations({
longitude: 0.25456342344,
latitude: 0.26665773234,
});
expect(pass.props["locations"].length).toBe(1);
pass.setLocations(null);
expect(pass.props["locations"]).toBeUndefined();
});
it("should filter out invalid beacons objects", () => {
const pass = new PKPass({}, {});
pass.setLocations(
{
// @ts-expect-error
longitude: "unknown",
// @ts-expect-error
latitude: "unknown",
},
{
altitude: "say hello from here",
longitude: 0.25456342344,
},
{
longitude: 0.25456342344,
latitude: 0.26665773234,
altitude: 12552.31233321,
relevantText:
/** Hi mom, see how do I fly! */
"Ciao mamma, guarda come volooo!",
},
);
expect(pass.props["locations"].length).toBe(1);
expect(pass.props["locations"][0].longitude).toBe(0.25456342344);
expect(pass.props["locations"][0].latitude).toBe(0.26665773234);
expect(pass.props["locations"][0].altitude).toBe(12552.31233321);
expect(pass.props["locations"][0].relevantText).toBe(
"Ciao mamma, guarda come volooo!",
);
});
});
}); });

View File

@@ -318,15 +318,33 @@ export default class PKPass extends Bundle {
* Allows setting some locations the OS should * Allows setting some locations the OS should
* react to and show this pass. * react to and show this pass.
* *
* Pass `null` to remove them at all.
*
* @example
* ```ts
* PKPassInstance.setLocations(null)
* PKPassInstance.setLocations({
* latitude: 0.5333245342
* longitude: 0.2135332252
* });
* ```
*
* @param locations * @param locations
* @returns * @returns
*/ */
setLocations(...locations: Schemas.Location[]): this { setLocations(locations: null): this;
/** setLocations(...locations: Schemas.Location[]): this;
* @TODO implement setLocations(...locations: (Schemas.Location | null)[]): this {
* @TODO specify a way to get current ones deleted if (locations[0] === null) {
*/ delete this[propsSymbol]["locations"];
return;
}
this[propsSymbol]["locations"] = Schemas.filterValid(
locations,
Schemas.Location,
);
return this; return this;
} }