Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
import { getMatchWinnerKey } from "content-src/components/Widgets/SportsWidget/matchResult.mjs";
function match(overrides = {}) {
return {
home_team: { key: "MEX" },
away_team: { key: "RSA" },
home_score: 0,
away_score: 0,
home_extra: null,
away_extra: null,
home_penalty: null,
away_penalty: null,
...overrides,
};
}
describe("getMatchWinnerKey", () => {
it("returns null for a null match", () => {
expect(getMatchWinnerKey(null)).toBeNull();
});
it("returns the home key when home scores more", () => {
expect(getMatchWinnerKey(match({ home_score: 2, away_score: 1 }))).toBe(
"MEX"
);
});
it("returns the away key when away scores more", () => {
expect(getMatchWinnerKey(match({ home_score: 0, away_score: 3 }))).toBe(
"RSA"
);
});
it("counts extra-time goals toward the aggregate", () => {
// 1+1 vs 1+0 -> home wins on extra time.
expect(
getMatchWinnerKey(
match({
home_score: 1,
away_score: 1,
home_extra: 1,
away_extra: 0,
})
)
).toBe("MEX");
});
it("returns null for a draw with no shootout", () => {
expect(
getMatchWinnerKey(match({ home_score: 1, away_score: 1 }))
).toBeNull();
});
it("resolves a level match by the penalty shootout", () => {
expect(
getMatchWinnerKey(
match({
home_score: 1,
away_score: 1,
home_penalty: 4,
away_penalty: 5,
})
)
).toBe("RSA");
});
it("treats equal penalties as a draw (no winner)", () => {
expect(
getMatchWinnerKey(
match({
home_score: 0,
away_score: 0,
home_penalty: 3,
away_penalty: 3,
})
)
).toBeNull();
});
});