From 93a03cb8d9de489082b804e9c17a378ad60806ca Mon Sep 17 00:00:00 2001 From: JoAnna578 Date: Mon, 13 Oct 2025 11:30:53 +0200 Subject: [PATCH 1/4] Implementacja funkcji ifElse i poprawa eksportu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wprowadzono główną logikę funkcji ifElse zgodnie ze specyfikacją. Poprawiono eksport modułu, aby pasował do formatu importu w testach (module.exports = ifElse). Funkcja teraz poprawnie wywołuje pierwszy lub drugi callback w zależności od wyniku funkcji warunkowej. --- src/ifElse.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ifElse.js b/src/ifElse.js index 7225adc..61ffd87 100644 --- a/src/ifElse.js +++ b/src/ifElse.js @@ -1,16 +1,16 @@ 'use strict'; /** - * @param condition - * @param first - * @param second + * @param {Function} condition + * @param {Function} first + * @param {Function} second */ function ifElse(condition, first, second) { - if (condition() === true) { + if (condition()) { first(); } else { second(); } } -module.exports = { ifElse }; +module.exports = ifElse; From 21264a191510129cac64ba7796ef575fe0a882c9 Mon Sep 17 00:00:00 2001 From: JoAnna578 Date: Mon, 13 Oct 2025 11:33:47 +0200 Subject: [PATCH 2/4] =?UTF-8?q?ifElse=20=E2=80=93=20dodanie=20test=C3=B3w?= =?UTF-8?q?=20dla=20wszystkich=20scenariuszy=20dzia=C5=82ania=20funkcji?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dodano komplet testów do funkcji ifElse, sprawdzających wywołanie callbacków w zależności od wartości warunku oraz brak zwracanej wartości. Testy obejmują przypadki true, false, dynamiczne warunki i poprawność działania funkcji zgodnie ze specyfikacją. --- src/ifElse.test.js | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/ifElse.test.js b/src/ifElse.test.js index 95985e0..5e2b826 100644 --- a/src/ifElse.test.js +++ b/src/ifElse.test.js @@ -1,11 +1,46 @@ 'use strict'; +const { ifElse } = require('./ifElse'); + describe('ifElse', () => { - // const { ifElse } = require('./ifElse'); + let firstMock; + let secondMock; + let conditionTrue; + let conditionFalse; + + beforeEach(() => { + firstMock = jest.fn(); + secondMock = jest.fn(); + conditionTrue = () => true; + conditionFalse = () => false; + }); + + it('should call first callback if condition returns true', () => { + ifElse(conditionTrue, firstMock, secondMock); + + expect(firstMock).toHaveBeenCalled(); + expect(secondMock).not.toHaveBeenCalled(); + }); - it('should ', () => { + it('should call second callback if condition returns false', () => { + ifElse(conditionFalse, firstMock, secondMock); + expect(secondMock).toHaveBeenCalled(); + expect(firstMock).not.toHaveBeenCalled(); }); - // write tests here + it('should work when condition is a dynamic function', () => { + const dynamicCondition = jest.fn(() => true); + ifElse(dynamicCondition, firstMock, secondMock); + + expect(dynamicCondition).toHaveBeenCalled(); + expect(firstMock).toHaveBeenCalled(); + expect(secondMock).not.toHaveBeenCalled(); + }); + + it('should not return any value', () => { + const result = ifElse(conditionTrue, firstMock, secondMock); + expect(result).toBeUndefined(); + }); }); + From 967446cbbdbfb75b7d456f4914a43c636a222e5c Mon Sep 17 00:00:00 2001 From: JoAnna578 Date: Mon, 13 Oct 2025 11:40:18 +0200 Subject: [PATCH 3/4] =?UTF-8?q?Poprawiony=20eksport=20funkcji=20ifElse=20?= =?UTF-8?q?=E2=80=93=20zgodny=20z=20importem=20w=20testach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zmiana eksportu z module.exports = ifElse na module.exports = { ifElse } umożliwia poprawną destrukturyzację w pliku testowym (const { ifElse } = require('./ifElse')) i usuwa błąd „TypeError: ifElse is not a function”. --- src/ifElse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifElse.js b/src/ifElse.js index 61ffd87..72819c5 100644 --- a/src/ifElse.js +++ b/src/ifElse.js @@ -13,4 +13,4 @@ function ifElse(condition, first, second) { } } -module.exports = ifElse; +module.exports = { ifElse }; From b474b9a2688586c1c113895223ff629790ceb071 Mon Sep 17 00:00:00 2001 From: JoAnna578 Date: Mon, 13 Oct 2025 12:03:13 +0200 Subject: [PATCH 4/4] =?UTF-8?q?ifElse=20=E2=80=93=20poprawa=20test=C3=B3w?= =?UTF-8?q?=20z=20mockami=20i=20precyzyjnymi=20asercjami?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zmieniono conditionTrue i conditionFalse na mocki (jest.fn) w beforeEach, aby możliwe było sprawdzenie liczby wywołań i argumentów. Każdy test teraz używa toHaveBeenCalledTimes i toHaveBeenCalledWith dla callbacków i warunków, a niewywołany callback jest sprawdzany przez not.toHaveBeenCalled(). Test 'should not return any value' również weryfikuje liczbę wywołań condition. Kompletna poprawka zgodna z checklistą AI. --- src/ifElse.test.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ifElse.test.js b/src/ifElse.test.js index 5e2b826..1aed025 100644 --- a/src/ifElse.test.js +++ b/src/ifElse.test.js @@ -11,36 +11,53 @@ describe('ifElse', () => { beforeEach(() => { firstMock = jest.fn(); secondMock = jest.fn(); - conditionTrue = () => true; - conditionFalse = () => false; + conditionTrue = jest.fn(() => true); + conditionFalse = jest.fn(() => false); }); it('should call first callback if condition returns true', () => { ifElse(conditionTrue, firstMock, secondMock); - expect(firstMock).toHaveBeenCalled(); + expect(conditionTrue).toHaveBeenCalledTimes(1); + expect(conditionTrue).toHaveBeenCalledWith(); + + expect(firstMock).toHaveBeenCalledTimes(1); + expect(firstMock).toHaveBeenCalledWith(); + expect(secondMock).not.toHaveBeenCalled(); }); it('should call second callback if condition returns false', () => { ifElse(conditionFalse, firstMock, secondMock); - expect(secondMock).toHaveBeenCalled(); + expect(conditionFalse).toHaveBeenCalledTimes(1); + expect(conditionFalse).toHaveBeenCalledWith(); + + expect(secondMock).toHaveBeenCalledTimes(1); + expect(secondMock).toHaveBeenCalledWith(); + expect(firstMock).not.toHaveBeenCalled(); }); it('should work when condition is a dynamic function', () => { const dynamicCondition = jest.fn(() => true); + ifElse(dynamicCondition, firstMock, secondMock); - expect(dynamicCondition).toHaveBeenCalled(); - expect(firstMock).toHaveBeenCalled(); + expect(dynamicCondition).toHaveBeenCalledTimes(1); + expect(dynamicCondition).toHaveBeenCalledWith(); + + expect(firstMock).toHaveBeenCalledTimes(1); + expect(firstMock).toHaveBeenCalledWith(); + expect(secondMock).not.toHaveBeenCalled(); }); it('should not return any value', () => { const result = ifElse(conditionTrue, firstMock, secondMock); + expect(result).toBeUndefined(); + expect(conditionTrue).toHaveBeenCalledTimes(1); }); });