From 925a4be58232eaf2e96d63c7d8f97dc7e08e0ec8 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 02:35:50 +0200 Subject: [PATCH 1/9] small test list, and request test became green --- tdd_intro/homework/04_weather_client/test.cpp | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 346ea809..a9b323cc 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -79,3 +79,71 @@ class IWeatherClient virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date) = 0; virtual double GetMaximumWindSpeed(IWeatherServer& server, const std::string& date) = 0; }; + +// Test list +// 1. request creating(look from inside server if client call server with correct request +// 2. responce parsing. separate function +// 3. + +class FakeWeatherServer : public IWeatherServer +{ + std::map m_data; + std::vector m_requests; +public: + FakeWeatherServer() + { + m_data = + { + {"31.08.2018;03:00", "20;181;5.1"}, + {"31.08.2018;09:00", "23;204;4.9"}, + {"31.08.2018;15:00", "33;193;4.3"}, + {"31.08.2018;21:00", "26;179;4.5"}, + {"01.09.2018;03:00", "19;176;4.2"}, + {"01.09.2018;09:00", "22;131;4.1"}, + {"01.09.2018;15:00", "31;109;4.0"}, + {"01.09.2018;21:00", "24;127;4.1"}, + {"02.09.2018;03:00", "21;158;3.8"}, + {"02.09.2018;09:00", "25;201;3.5"}, + {"02.09.2018;15:00", "34;258;3.7"}, + {"02.09.2018;21:00", "27;299;4.0"} + }; + } + std::string GetWeather(const std::string &request) + { + m_requests.push_back(request); + auto it = m_data.find(request); + if(it == m_data.end()) + { + return ""; + } + return it->second; + } + + std::vector GetRequests() + { + return m_requests; + } +}; + +class WeatherClient : public IWeatherClient +{ +public: + virtual double GetAverageTemperature(IWeatherServer& server, const std::string& date) + { + std::string request = date + ";03:00"; + server.GetWeather(request); + return 0.0; + } + virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date){return 0.0;} + virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date){return 0.0;} + virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date){return 0.0;} + virtual double GetMaximumWindSpeed(IWeatherServer& server, const std::string& date){return 0.0;} +}; + +TEST(WeatherClient, ServerCallParameters) +{ + WeatherClient client; + FakeWeatherServer server; + client.GetAverageTemperature(server, "31.08.2018"); + ASSERT_EQ("31.08.2018;03:00", server.GetRequests().at(0)); +} From 4e352344d163fbea91ab575f7844623035cfc242 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 03:04:22 +0200 Subject: [PATCH 2/9] Tested client sends 4 requests for a day with correct times. Refactored --- tdd_intro/homework/04_weather_client/test.cpp | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index a9b323cc..7bb9bbdd 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -81,10 +81,17 @@ class IWeatherClient }; // Test list -// 1. request creating(look from inside server if client call server with correct request +// done: 1. request creating(look from inside server if client call server with correct request // 2. responce parsing. separate function // 3. + +const std::string s_testDate = "31.08.2018"; +const std::string s_3hours = "03:00"; +const std::string s_9hours = "09:00"; +const std::string s_15hours = "15:00"; +const std::string s_21hour = "21:00"; + class FakeWeatherServer : public IWeatherServer { std::map m_data; @@ -125,25 +132,59 @@ class FakeWeatherServer : public IWeatherServer } }; +std::string CreateRequest(const std::string& date, const std::string& time) +{ + return date+";"+time; +} class WeatherClient : public IWeatherClient { public: virtual double GetAverageTemperature(IWeatherServer& server, const std::string& date) { - std::string request = date + ";03:00"; - server.GetWeather(request); + GetWeatherForADay(server, date); + return 0.0; + } + virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date) + { + GetWeatherForADay(server, date); return 0.0; } - virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date){return 0.0;} virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date){return 0.0;} virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date){return 0.0;} virtual double GetMaximumWindSpeed(IWeatherServer& server, const std::string& date){return 0.0;} +private: + std::vector GetWeatherForADay(IWeatherServer& server, const std::string& date) + { + std::vector weatherContainer; + const std::vector timePoints = {s_3hours, s_9hours, s_15hours, s_21hour}; + for(size_t i = 0; i < timePoints.size(); ++i) + { + std::string request = CreateRequest(date, timePoints[i]); + weatherContainer.push_back(server.GetWeather(request)); + } + return weatherContainer; + } }; -TEST(WeatherClient, ServerCallParameters) +TEST(WeatherClient, ClientCallsServerWith3hoursTimeForAvrTemperature) { WeatherClient client; FakeWeatherServer server; - client.GetAverageTemperature(server, "31.08.2018"); - ASSERT_EQ("31.08.2018;03:00", server.GetRequests().at(0)); + client.GetAverageTemperature(server, s_testDate); + ASSERT_EQ(CreateRequest(s_testDate,s_3hours), server.GetRequests().at(0)); +} + +TEST(WeatherClient, ClientSends4TimesForMinTemp) +{ + std::vector expectedRequests = + { + CreateRequest(s_testDate,s_3hours), + CreateRequest(s_testDate,s_9hours), + CreateRequest(s_testDate,s_15hours), + CreateRequest(s_testDate,s_21hour) + }; + FakeWeatherServer server; + WeatherClient client; + client.GetMinimumTemperature(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); } From 9e8060dec555ae917c115dd75d0c79406d7fa144 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 03:17:02 +0200 Subject: [PATCH 3/9] Client calls server: Checked other client methods --- tdd_intro/homework/04_weather_client/test.cpp | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 7bb9bbdd..6fb8b4a7 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -128,7 +128,9 @@ class FakeWeatherServer : public IWeatherServer std::vector GetRequests() { - return m_requests; + std::vector result; + result.swap(m_requests); + return result; } }; @@ -149,9 +151,21 @@ class WeatherClient : public IWeatherClient GetWeatherForADay(server, date); return 0.0; } - virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date){return 0.0;} - virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date){return 0.0;} - virtual double GetMaximumWindSpeed(IWeatherServer& server, const std::string& date){return 0.0;} + virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date) + { + GetWeatherForADay(server, date); + return 0.0; + } + virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date) + { + GetWeatherForADay(server, date); + return 0.0; + } + virtual double GetMaximumWindSpeed(IWeatherServer& server, const std::string& date) + { + GetWeatherForADay(server, date); + return 0.0; + } private: std::vector GetWeatherForADay(IWeatherServer& server, const std::string& date) { @@ -188,3 +202,31 @@ TEST(WeatherClient, ClientSends4TimesForMinTemp) client.GetMinimumTemperature(server, s_testDate); ASSERT_EQ(expectedRequests, server.GetRequests()); } +TEST(WeatherClient, FourRequestsForAnyClientCall) +{ + std::vector expectedRequests = + { + CreateRequest(s_testDate,s_3hours), + CreateRequest(s_testDate,s_9hours), + CreateRequest(s_testDate,s_15hours), + CreateRequest(s_testDate,s_21hour) + }; + WeatherClient client; + FakeWeatherServer server; + + client.GetAverageTemperature(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); + + client.GetMaximumTemperature(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); + + client.GetAverageWindDirection(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); + + client.GetAverageWindDirection(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); + + client.GetMaximumWindSpeed(server, s_testDate); + ASSERT_EQ(expectedRequests, server.GetRequests()); + +} From b17c2fe763b66756e708d758bdcb8bcc6fee7b6b Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 03:22:25 +0200 Subject: [PATCH 4/9] refactoring --- tdd_intro/homework/04_weather_client/test.cpp | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 6fb8b4a7..e8ffe617 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -85,6 +85,7 @@ class IWeatherClient // 2. responce parsing. separate function // 3. +using StringContainer = std::vector; const std::string s_testDate = "31.08.2018"; const std::string s_3hours = "03:00"; @@ -92,10 +93,11 @@ const std::string s_9hours = "09:00"; const std::string s_15hours = "15:00"; const std::string s_21hour = "21:00"; + class FakeWeatherServer : public IWeatherServer { std::map m_data; - std::vector m_requests; + StringContainer m_requests; public: FakeWeatherServer() { @@ -126,9 +128,9 @@ class FakeWeatherServer : public IWeatherServer return it->second; } - std::vector GetRequests() + StringContainer GetRequests() { - std::vector result; + StringContainer result; result.swap(m_requests); return result; } @@ -167,10 +169,10 @@ class WeatherClient : public IWeatherClient return 0.0; } private: - std::vector GetWeatherForADay(IWeatherServer& server, const std::string& date) + StringContainer GetWeatherForADay(IWeatherServer& server, const std::string& date) { - std::vector weatherContainer; - const std::vector timePoints = {s_3hours, s_9hours, s_15hours, s_21hour}; + StringContainer weatherContainer; + const StringContainer timePoints = {s_3hours, s_9hours, s_15hours, s_21hour}; for(size_t i = 0; i < timePoints.size(); ++i) { std::string request = CreateRequest(date, timePoints[i]); @@ -180,6 +182,17 @@ class WeatherClient : public IWeatherClient } }; +StringContainer GenerateExpectedRequests(const std::string& date) +{ + return + { + CreateRequest(date,s_3hours), + CreateRequest(date,s_9hours), + CreateRequest(date,s_15hours), + CreateRequest(date,s_21hour) + }; +} + TEST(WeatherClient, ClientCallsServerWith3hoursTimeForAvrTemperature) { WeatherClient client; @@ -190,13 +203,7 @@ TEST(WeatherClient, ClientCallsServerWith3hoursTimeForAvrTemperature) TEST(WeatherClient, ClientSends4TimesForMinTemp) { - std::vector expectedRequests = - { - CreateRequest(s_testDate,s_3hours), - CreateRequest(s_testDate,s_9hours), - CreateRequest(s_testDate,s_15hours), - CreateRequest(s_testDate,s_21hour) - }; + StringContainer expectedRequests = GenerateExpectedRequests(s_testDate); FakeWeatherServer server; WeatherClient client; client.GetMinimumTemperature(server, s_testDate); @@ -204,13 +211,7 @@ TEST(WeatherClient, ClientSends4TimesForMinTemp) } TEST(WeatherClient, FourRequestsForAnyClientCall) { - std::vector expectedRequests = - { - CreateRequest(s_testDate,s_3hours), - CreateRequest(s_testDate,s_9hours), - CreateRequest(s_testDate,s_15hours), - CreateRequest(s_testDate,s_21hour) - }; + StringContainer expectedRequests = GenerateExpectedRequests(s_testDate); WeatherClient client; FakeWeatherServer server; @@ -228,5 +229,4 @@ TEST(WeatherClient, FourRequestsForAnyClientCall) client.GetMaximumWindSpeed(server, s_testDate); ASSERT_EQ(expectedRequests, server.GetRequests()); - } From 5616e9398d86b39761c486a81629d3fe1d0154a5 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 03:41:22 +0200 Subject: [PATCH 5/9] Weather parsing. First test --- tdd_intro/homework/04_weather_client/test.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index e8ffe617..1557eab7 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -93,6 +93,12 @@ const std::string s_9hours = "09:00"; const std::string s_15hours = "15:00"; const std::string s_21hour = "21:00"; +Weather ParseWeather(const std::string& response) +{ + Weather weather; + weather.temperature = std::atoi(response.substr(0, response.find(";")).c_str()); + return weather; +} class FakeWeatherServer : public IWeatherServer { @@ -230,3 +236,9 @@ TEST(WeatherClient, FourRequestsForAnyClientCall) client.GetMaximumWindSpeed(server, s_testDate); ASSERT_EQ(expectedRequests, server.GetRequests()); } + +TEST(ParseResponce, TemperatureIs10For10_180_5) +{ + Weather response = ParseWeather("10;180;5"); + ASSERT_EQ(10, response.temperature); +} From ef583e320a2a571c4112f77c74bb0563cbc6fe08 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 04:12:35 +0200 Subject: [PATCH 6/9] Test for minimum temperature as it is simple to calculate --- tdd_intro/homework/04_weather_client/test.cpp | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 1557eab7..74903a8a 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -82,10 +82,11 @@ class IWeatherClient // Test list // done: 1. request creating(look from inside server if client call server with correct request -// 2. responce parsing. separate function -// 3. +// done: 2. responce parsing. separate function +// 3. Minium temperature. For different days using StringContainer = std::vector; +using WeatherContainer = std::vector; const std::string s_testDate = "31.08.2018"; const std::string s_3hours = "03:00"; @@ -93,10 +94,21 @@ const std::string s_9hours = "09:00"; const std::string s_15hours = "15:00"; const std::string s_21hour = "21:00"; +std::string RemoveFirstToken(std::string& str, const std::string& separator) +{ + size_t offset = str.find(separator); + std::string result = str.substr(0, offset); + str.erase(0, offset+1); + return result; +} + Weather ParseWeather(const std::string& response) { Weather weather; - weather.temperature = std::atoi(response.substr(0, response.find(";")).c_str()); + std::string tmpResponse = response; + weather.temperature = std::atoi(RemoveFirstToken(tmpResponse, ";").c_str()); + weather.windDirection = std::atoi(RemoveFirstToken(tmpResponse, ";").c_str()); + weather.windSpeed = std::atof(RemoveFirstToken(tmpResponse, ";").c_str()); return weather; } @@ -156,8 +168,13 @@ class WeatherClient : public IWeatherClient } virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date) { - GetWeatherForADay(server, date); - return 0.0; + WeatherContainer weatherArray = GetWeatherForADay(server, date); + short min = weatherArray[0].temperature; + for(size_t i = 1; i < weatherArray.size(); ++i) + { + min = std::min(min, weatherArray[i].temperature); + } + return min; } virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date) { @@ -175,14 +192,15 @@ class WeatherClient : public IWeatherClient return 0.0; } private: - StringContainer GetWeatherForADay(IWeatherServer& server, const std::string& date) + WeatherContainer GetWeatherForADay(IWeatherServer& server, const std::string& date) { - StringContainer weatherContainer; + WeatherContainer weatherContainer; const StringContainer timePoints = {s_3hours, s_9hours, s_15hours, s_21hour}; for(size_t i = 0; i < timePoints.size(); ++i) { std::string request = CreateRequest(date, timePoints[i]); - weatherContainer.push_back(server.GetWeather(request)); + std::string response = server.GetWeather(request); + weatherContainer.push_back(ParseWeather(response)); } return weatherContainer; } @@ -237,8 +255,30 @@ TEST(WeatherClient, FourRequestsForAnyClientCall) ASSERT_EQ(expectedRequests, server.GetRequests()); } +TEST(RemoveFirstToken, FirstIs10For10_180_5) +{ + std::string str("10;180;5"); + std::string first = RemoveFirstToken(str, ";"); + ASSERT_EQ("10", first); + ASSERT_EQ("180;5", str); +} + TEST(ParseResponce, TemperatureIs10For10_180_5) { Weather response = ParseWeather("10;180;5"); ASSERT_EQ(10, response.temperature); } + +TEST(ParseResponce, WeatherFieldsFor10_180_5) +{ + Weather response = ParseWeather("10;180;5"); + ASSERT_EQ(180, response.windDirection); + ASSERT_EQ(5, response.windSpeed); +} + +TEST(WeatherClient, MinTemperatureIs21For02_09_2018) +{ + FakeWeatherServer server; + WeatherClient client; + ASSERT_EQ(21, client.GetMinimumTemperature(server, "02.09.2018")); +} From aaeb67e7a52f3029ff13345f9eaba658ab506639 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 04:12:51 +0200 Subject: [PATCH 7/9] build fix --- tdd_intro/cleanroom/chatclient/test.cpp | 131 ------------------------ 1 file changed, 131 deletions(-) diff --git a/tdd_intro/cleanroom/chatclient/test.cpp b/tdd_intro/cleanroom/chatclient/test.cpp index 599f292a..7bf393a1 100644 --- a/tdd_intro/cleanroom/chatclient/test.cpp +++ b/tdd_intro/cleanroom/chatclient/test.cpp @@ -40,134 +40,3 @@ Implement chat application, that communicates via TCP sockets. #include "mocks.h" using namespace ::testing; - -bool TryToBind(ISocketWrapper& socket) -{ - try - { - socket.Bind("", 0); - } - catch (const std::exception& ex) - { - return false; - } - - return true; -} - -ISocketWrapperPtr EstablishConnection(ISocketWrapper& socket) -{ - if (TryToBind(socket)) - { - socket.Listen(); - return socket.Accept(); - } - else - { - return socket.Connect("", 0); - } -} - -void WriteToSocket(ISocketWrapper& socket, std::string data) -{ - data.push_back('\0'); - socket.Write(data); -} - -void ReadFromSocket(ISocketWrapper& socket, std::string& data) -{ - socket.Read(data); -} - -TEST(Chat, StartAsServer) -{ - StrictMock socketMock; - EXPECT_CALL(socketMock, Bind(_, _)); - ASSERT_TRUE(TryToBind(socketMock)); -} - -TEST(Chat, StartAsClient) -{ - StrictMock socketMock; - EXPECT_CALL(socketMock, Bind(_, _)).WillOnce(Throw(std::runtime_error(""))); - ASSERT_FALSE(TryToBind(socketMock)); -} - -TEST(Chat, StartConnection) -{ - StrictMock socketMock; - EXPECT_CALL(socketMock, Bind(_, _)).WillOnce(Throw(std::runtime_error(""))); - EXPECT_CALL(socketMock, Connect(_, _)).WillOnce(Return(ISocketWrapperPtr())); - EstablishConnection(socketMock); -} - -TEST(Chat, AcceptAfterListen) -{ - StrictMock listener; - StrictMock client; - InSequence sequence; - EXPECT_CALL(listener, Bind(_, _)); - EXPECT_CALL(listener, Listen()); - EXPECT_CALL(listener, Accept()).WillOnce(Return(ISocketWrapperPtr())); - EXPECT_CALL(client, Bind(_, _)).WillOnce(Throw(std::runtime_error(""))); - EXPECT_CALL(client, Connect(_, _)).WillOnce(Return(ISocketWrapperPtr())); - - EstablishConnection(listener); - EstablishConnection(client); -} - -TEST(Chat, ReturnsClientSocket) -{ - SocketWrapperMock listener; - EXPECT_CALL(listener, Accept()).WillOnce(Return(std::make_shared())); - ASSERT_NE(nullptr, EstablishConnection(listener)); -} - -TEST(Chat, ReturnsServerSocket) -{ - SocketWrapperMock server; - EXPECT_CALL(server, Bind(_, _)).WillOnce(Throw(std::runtime_error(""))); - EXPECT_CALL(server, Connect(_, _)).WillOnce(Return(std::make_shared())); - ASSERT_NE(nullptr, EstablishConnection(server)); -} - -TEST(Chat, WriteSomethingToSocket) -{ - SocketWrapperMock server; - EXPECT_CALL(server, Write(_)).Times(1); - WriteToSocket(server,"Hello"); -} - -TEST(Chat, WriteDataToSocket) -{ - std::string expected("Hello", sizeof("Hello")); - - SocketWrapperMock server; - EXPECT_CALL(server, Write(expected)).Times(1); - WriteToSocket(server,"Hello"); -} - -TEST(Chat, ReadSomethingFromSocket) -{ - SocketWrapperMock server; - std::string data; - EXPECT_CALL(server, Read(data)).Times(1); - ReadFromSocket(server, data); -} - -TEST(Chat, ReadDataFromSocket) -{ - SocketWrapperMock server; - std::string data; - EXPECT_CALL(server, Read(data)).WillOnce(::SetArgReferee<0>("Hello")); - ReadFromSocket(server, data); - ASSERT_EQ("Hello", data); -} - -TEST(Chat, ClientHandshakeStart) -{ - SocketWrapperMock socket; - std::string nickname = "client"; - EXPECT_CALL(socket, Write("client:HELLO!")).Times(1); - ClientHandshake(socket, nickname); -} From 483fe89ebd7ff9656f92c02a0ba90e5bb3a92dc5 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 04:16:39 +0200 Subject: [PATCH 8/9] average temperature. Without refactoring --- tdd_intro/homework/04_weather_client/test.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 74903a8a..458c7b5d 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -163,8 +163,13 @@ class WeatherClient : public IWeatherClient public: virtual double GetAverageTemperature(IWeatherServer& server, const std::string& date) { - GetWeatherForADay(server, date); - return 0.0; + WeatherContainer weatherArray = GetWeatherForADay(server, date); + short sum = 0; + for(size_t i = 0; i < weatherArray.size(); ++i) + { + sum += weatherArray[i].temperature; + } + return static_cast(sum)/weatherArray.size(); } virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date) { @@ -282,3 +287,10 @@ TEST(WeatherClient, MinTemperatureIs21For02_09_2018) WeatherClient client; ASSERT_EQ(21, client.GetMinimumTemperature(server, "02.09.2018")); } + +TEST(WeatherClient, AverageTemperatureIs24For01_09_2018) +{ + FakeWeatherServer server; + WeatherClient client; + ASSERT_EQ(24, client.GetAverageTemperature(server, "01.09.2018")); +} From ca04b5a3c00d1453928326b79e1738f7362409e3 Mon Sep 17 00:00:00 2001 From: Podrez Date: Fri, 23 Nov 2018 04:31:12 +0200 Subject: [PATCH 9/9] Temperature is covered with tests --- tdd_intro/homework/04_weather_client/test.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/04_weather_client/test.cpp b/tdd_intro/homework/04_weather_client/test.cpp index 458c7b5d..04fdd57c 100644 --- a/tdd_intro/homework/04_weather_client/test.cpp +++ b/tdd_intro/homework/04_weather_client/test.cpp @@ -164,12 +164,12 @@ class WeatherClient : public IWeatherClient virtual double GetAverageTemperature(IWeatherServer& server, const std::string& date) { WeatherContainer weatherArray = GetWeatherForADay(server, date); - short sum = 0; + double sum = 0; for(size_t i = 0; i < weatherArray.size(); ++i) { sum += weatherArray[i].temperature; } - return static_cast(sum)/weatherArray.size(); + return sum/weatherArray.size(); } virtual double GetMinimumTemperature(IWeatherServer& server, const std::string& date) { @@ -183,8 +183,13 @@ class WeatherClient : public IWeatherClient } virtual double GetMaximumTemperature(IWeatherServer& server, const std::string& date) { - GetWeatherForADay(server, date); - return 0.0; + WeatherContainer weatherArray = GetWeatherForADay(server, date); + short max = weatherArray[0].temperature; + for(size_t i = 1; i < weatherArray.size(); ++i) + { + max = std::max(max, weatherArray[i].temperature); + } + return max; } virtual double GetAverageWindDirection(IWeatherServer& server, const std::string& date) { @@ -294,3 +299,9 @@ TEST(WeatherClient, AverageTemperatureIs24For01_09_2018) WeatherClient client; ASSERT_EQ(24, client.GetAverageTemperature(server, "01.09.2018")); } +TEST(WeatherClient, MaxTemperatureIs33For31_08_2018) +{ + FakeWeatherServer server; + WeatherClient client; + ASSERT_EQ(33, client.GetMaximumTemperature(server, "31.08.2018")); +}