From eeeda711f64ce1c74540dff0db29e6995c4fae62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Ara=C3=BAjo?= Date: Sun, 9 Aug 2020 22:26:09 -0300 Subject: [PATCH 1/5] feat(checkout-kata): total tests --- checkout.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ rules.py | 7 ++++++ 2 files changed, 74 insertions(+) create mode 100644 checkout.py create mode 100644 rules.py diff --git a/checkout.py b/checkout.py new file mode 100644 index 0000000..02d3c45 --- /dev/null +++ b/checkout.py @@ -0,0 +1,67 @@ +import unittest +from rules import prices +from copy import deepcopy + +class Checkout(): + + def __init__(self): + self.copy_prices = deepcopy(prices) + self.total = 0 + + @staticmethod + def new(newRules): + return Checkout() + + def scan(self,sku): + self.count(sku) + if self.has_discount(sku): + self.apply_discount(sku) + else: + self.total += self.copy_prices[sku]['price'] + + def has_discount(self,sku): + if(self.copy_prices[sku]['specialQtd'] != 0 and self.copy_prices[sku]['repeat'] % self.copy_prices[sku]['specialQtd'] == 0): + return True + else: + return False + + def apply_discount(self, sku): + self.total += self.copy_prices[sku]['price'] + self.total -= (self.copy_prices[sku]['repeat'] * self.copy_prices[sku]['price']) + self.total += self.copy_prices[sku]['specialPrice'] + self.copy_prices[sku]['repeat'] = 0 + + def count(self, sku): + if self.copy_prices[sku]['repeat'] == 0: + self.copy_prices[sku]['repeat'] = 1 + + elif(self.copy_prices[sku]['repeat'] == 0 and self.copy_prices[sku]['specialPrice'] == 0): + self.copy_prices[sku]['repeat'] = 0 + else: + self.copy_prices[sku]['repeat'] += 1 + +class TestStringMethods(unittest.TestCase): + def scanSKU(self,skus): + c = Checkout.new(prices) + for sku in skus: + c.scan(sku) + print(c.total) + return c.total + + def test_totals(self): + self.assertEqual(self.scanSKU(''), 0 ) + self.assertEqual(self.scanSKU('A'), 50) + self.assertEqual(self.scanSKU('AB'), 80) + self.assertEqual(self.scanSKU('CDBA'), 115) + self.assertEqual(self.scanSKU('AA'), 100) + self.assertEqual(self.scanSKU('AAA'), 130) + self.assertEqual(self.scanSKU('AAAA'), 180) + self.assertEqual(self.scanSKU('AAAAA'), 230) + self.assertEqual(self.scanSKU('AAAAAA'), 260) + self.assertEqual(self.scanSKU('AAAB'), 160) + self.assertEqual(self.scanSKU('AAABB'), 175) + self.assertEqual(self.scanSKU('AAABBD'), 190) + self.assertEqual(self.scanSKU('DABABA'), 190) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/rules.py b/rules.py new file mode 100644 index 0000000..d4fd30b --- /dev/null +++ b/rules.py @@ -0,0 +1,7 @@ +prices = { + 'A' : {'price': 50, 'specialQtd': 3, 'specialPrice': 130, 'repeat' : 0 } , + 'B' : {'price': 30, 'specialQtd': 2, 'specialPrice': 45, 'repeat' : 0 }, + 'C' : {'price': 20, 'specialQtd': 0, 'specialPrice': 0, 'repeat' : 0 }, + 'D' : {'price': 15, 'specialQtd': 0, 'specialPrice': 0, 'repeat' : 0 }, + '' : {'price': 0, 'specialQtd': 0, 'specialPrice': 0, 'repeat' : 0 } +} \ No newline at end of file From ff52cbbba99b22b172f826c85d8ba7d68603ff26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Ara=C3=BAjo?= Date: Mon, 10 Aug 2020 01:32:50 -0300 Subject: [PATCH 2/5] feat(whatsapp): First Feature - User Status Messages --- whatsapp/sendMessage.feature | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 whatsapp/sendMessage.feature diff --git a/whatsapp/sendMessage.feature b/whatsapp/sendMessage.feature new file mode 100644 index 0000000..637d0aa --- /dev/null +++ b/whatsapp/sendMessage.feature @@ -0,0 +1,81 @@ + @runSendWhatsFeature + Feature: User status messages + @critical + Scenario Outline: User send a message successfully + Given I open Whatsapp Application + Then I'm on the chat screen + When I click on Write Message icon + Then New chat modal was open successful + When I type on search textfield: + Then Users will be filtered and User + When I click on the first result + Then I am on private chat + When I type on message textfield: + Then send message button was displayed + When I click on send message button + Then The message was displayed on the internal screen + Then The first checkmark was displayed + + Examples: + | friendName | message | + | Renato Araújo | Hi There!\n I'm sending you this message to testing the send message feature | + | Juliana Freitas | :) follow my message with emoji to make your day even better | + | Jhon Due Interviewer | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis massa leo, pretium non condimentum a, consequat et dui. Cras quis elit dignissim, fermentum ex non, convallis metus. Fusce facilisis pellentesque hendrerit. Fusce vitae scelerisque lacus, nec ultricies dolor. Sed tincidunt sagittis tempor. Donec posuere lacus vel semper iaculis. Praesent vel bibendum turpis. Aenean ultrices pulvinar interdum. Praesent scelerisque ipsum lacus, id iaculis enim efficitur vestibulum. Maecenas ac leo a tellus tincidunt tincidunt. Donec sodales ornare urna, sit amet porta nulla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed eget libero tincidunt, imperdiet velit id, elementum nunc. Aliquam non tempus libero, vel porttitor mauris. Donec posuere nisi vitae lectus posuere, nec elementum ligula faucibus. Mauris dolor purus, blandit sit amet dapibus commodo, dictum nec mauris. Curabitur nec ante pretium, aliquam urna ut, pharetra sem. Maecenas ipsum tellus, sodales a neque id, euismod posuere tortor. Aenean porta risus quis turpis porta faucibus eget ultricies lectus. Cras porttitor eros non maximus euismod. Pellentesque non dui leo. Proin et tempor risus. Vestibulum sit amet porta odio. Curabitur sed lacus enim. Phasellus vehicula vestibulum justo quis auctor. Cras vitae finibus arcu. Aenean tempus malesuada tortor, a rhoncus risus sodales nec. Sed dapibus eleifend massa. Praesent volutpat pellentesque arcu in facilisis. \nEtiam nibh sapien, dignissim a erat id, efficitur pulvinar nunc. Suspendisse euismod ut tortor bibendum congue. Nulla erat orci, sodales ac dolor id, imperdiet viverra nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam eleifend sapien neque. Curabitur vitae pharetra nibh, tempor viverra diam. Pellentesque venenatis magna nisl, id placerat ligula vehicula nec. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget malesuada leo. Nunc placerat orci neque, at dignissim diam venenatis vitae. Donec lobortis eu mi at mattis. Vestibulum molestie tellus a enim dapibus varius. Maecenas vitae augue augue.\n Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis ante enim, gravida consequat dolor ut, sodales volutpat sapien. Maecenas felis erat, laoreet euismod tempor a, tempor et libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse eget felis erat. Integer pharetra pharetra elit tempus posuere. Phasellus consectetur at erat accumsan blandit. Etiam sed lacus libero. Sed hendrerit finibus hendrerit. Phasellus consectetur tempor quam eget semper. Cras congue molestie dui, id facilisis tortor sollicitudin a. | + + @critical + Scenario Outline: User delete for all a message + Given I open Whatsapp Application + Then I'm on the chat screen + When I click on Write Message icon + Then New chat modal was open successful + When I type on search textfield: + Then Users will be filtered and User + When I click on the first result + Then I am on private chat + When I type on message textfield: + Then send message button was displayed + When I click on send message button + Then The message was displayed on the internal screen + Then The first checkmark was displayed + When I perform a long press on message: + Then The message dropdown is displayed + When I click on Erase button + Then The message: are selected + And The erase button is displayed + When I click on erase button + Then I choose to erase for all + Then The first checkmark is not displayed + And The send message now is replace + + Examples: + | friendName | message | + | Renato Araújo | Hi There!\n I'm sending you this message to testing the send message feature | + | Juliana Freitas | :) follow my message with emoji to make your day even better | + | Jhon Due Interviewer | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis massa leo, pretium non condimentum a, consequat et dui. Cras quis elit dignissim, fermentum ex non, convallis metus. Fusce facilisis pellentesque hendrerit. Fusce vitae scelerisque lacus, nec ultricies dolor. Sed tincidunt sagittis tempor. Donec posuere lacus vel semper iaculis. Praesent vel bibendum turpis. Aenean ultrices pulvinar interdum. Praesent scelerisque ipsum lacus, id iaculis enim efficitur vestibulum. Maecenas ac leo a tellus tincidunt tincidunt. Donec sodales ornare urna, sit amet porta nulla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed eget libero tincidunt, imperdiet velit id, elementum nunc. Aliquam non tempus libero, vel porttitor mauris. Donec posuere nisi vitae lectus posuere, nec elementum ligula faucibus. Mauris dolor purus, blandit sit amet dapibus commodo, dictum nec mauris. Curabitur nec ante pretium, aliquam urna ut, pharetra sem. Maecenas ipsum tellus, sodales a neque id, euismod posuere tortor. Aenean porta risus quis turpis porta faucibus eget ultricies lectus. Cras porttitor eros non maximus euismod. Pellentesque non dui leo. Proin et tempor risus. Vestibulum sit amet porta odio. Curabitur sed lacus enim. Phasellus vehicula vestibulum justo quis auctor. Cras vitae finibus arcu. Aenean tempus malesuada tortor, a rhoncus risus sodales nec. Sed dapibus eleifend massa. Praesent volutpat pellentesque arcu in facilisis. \nEtiam nibh sapien, dignissim a erat id, efficitur pulvinar nunc. Suspendisse euismod ut tortor bibendum congue. Nulla erat orci, sodales ac dolor id, imperdiet viverra nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam eleifend sapien neque. Curabitur vitae pharetra nibh, tempor viverra diam. Pellentesque venenatis magna nisl, id placerat ligula vehicula nec. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget malesuada leo. Nunc placerat orci neque, at dignissim diam venenatis vitae. Donec lobortis eu mi at mattis. Vestibulum molestie tellus a enim dapibus varius. Maecenas vitae augue augue.\n Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis ante enim, gravida consequat dolor ut, sodales volutpat sapien. Maecenas felis erat, laoreet euismod tempor a, tempor et libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse eget felis erat. Integer pharetra pharetra elit tempus posuere. Phasellus consectetur at erat accumsan blandit. Etiam sed lacus libero. Sed hendrerit finibus hendrerit. Phasellus consectetur tempor quam eget semper. Cras congue molestie dui, id facilisis tortor sollicitudin a. | | + | Myself | This test will fail | + + @critical + Scenario Outline: User send a message with internet thoubles + Given I open Whatsapp Application + Then I'm on the chat screen + When I click on Write Message icon + Then New chat modal was open successful + When I type on search textfield: + Then Users will be filtered and User + When I click on first result + Then I am on private chat + When I type on message textfield: + Then send message button was displayed + When I click on send message button + And Intenet troubles are detected + Then The message was displayed on the internal screen + And The clockmark is was displayed + When Connections are stabilized + Then The first checkmark was displayed + + Examples: + | friendName | message | + | Renato Araújo | Hi There!\n I'm sending you this message to testing the send message feature | + | Juliana Freitas | :) follow my message with emoji to make your day even better | + | Jhon Due Interviewer | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis massa leo, pretium non condimentum a, consequat et dui. Cras quis elit dignissim, fermentum ex non, convallis metus. Fusce facilisis pellentesque hendrerit. Fusce vitae scelerisque lacus, nec ultricies dolor. Sed tincidunt sagittis tempor. Donec posuere lacus vel semper iaculis. Praesent vel bibendum turpis. Aenean ultrices pulvinar interdum. Praesent scelerisque ipsum lacus, id iaculis enim efficitur vestibulum. Maecenas ac leo a tellus tincidunt tincidunt. Donec sodales ornare urna, sit amet porta nulla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Sed eget libero tincidunt, imperdiet velit id, elementum nunc. Aliquam non tempus libero, vel porttitor mauris. Donec posuere nisi vitae lectus posuere, nec elementum ligula faucibus. Mauris dolor purus, blandit sit amet dapibus commodo, dictum nec mauris. Curabitur nec ante pretium, aliquam urna ut, pharetra sem. Maecenas ipsum tellus, sodales a neque id, euismod posuere tortor. Aenean porta risus quis turpis porta faucibus eget ultricies lectus. Cras porttitor eros non maximus euismod. Pellentesque non dui leo. Proin et tempor risus. Vestibulum sit amet porta odio. Curabitur sed lacus enim. Phasellus vehicula vestibulum justo quis auctor. Cras vitae finibus arcu. Aenean tempus malesuada tortor, a rhoncus risus sodales nec. Sed dapibus eleifend massa. Praesent volutpat pellentesque arcu in facilisis. \nEtiam nibh sapien, dignissim a erat id, efficitur pulvinar nunc. Suspendisse euismod ut tortor bibendum congue. Nulla erat orci, sodales ac dolor id, imperdiet viverra nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam eleifend sapien neque. Curabitur vitae pharetra nibh, tempor viverra diam. Pellentesque venenatis magna nisl, id placerat ligula vehicula nec. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget malesuada leo. Nunc placerat orci neque, at dignissim diam venenatis vitae. Donec lobortis eu mi at mattis. Vestibulum molestie tellus a enim dapibus varius. Maecenas vitae augue augue.\n Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis ante enim, gravida consequat dolor ut, sodales volutpat sapien. Maecenas felis erat, laoreet euismod tempor a, tempor et libero. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse eget felis erat. Integer pharetra pharetra elit tempus posuere. Phasellus consectetur at erat accumsan blandit. Etiam sed lacus libero. Sed hendrerit finibus hendrerit. Phasellus consectetur tempor quam eget semper. Cras congue molestie dui, id facilisis tortor sollicitudin a. | + | Mysealf | This test will fail \ No newline at end of file From 714c934b9f42775532a4952d7e9e7488d6389e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Ara=C3=BAjo?= Date: Mon, 10 Aug 2020 18:37:47 -0300 Subject: [PATCH 3/5] feat(checkout-kata): incremental test and refactor --- .gitignore | 2 ++ checkout.py => checkout/checkout.py | 39 ++++++++--------------------- runTest.py | 5 ++++ tests/test.py | 30 ++++++++++++++++++++++ 4 files changed, 48 insertions(+), 28 deletions(-) create mode 100644 .gitignore rename checkout.py => checkout/checkout.py (56%) create mode 100644 runTest.py create mode 100644 tests/test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6af8a75 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +/__pycache__ \ No newline at end of file diff --git a/checkout.py b/checkout/checkout.py similarity index 56% rename from checkout.py rename to checkout/checkout.py index 02d3c45..57899b1 100644 --- a/checkout.py +++ b/checkout/checkout.py @@ -3,15 +3,11 @@ from copy import deepcopy class Checkout(): - + def __init__(self): self.copy_prices = deepcopy(prices) self.total = 0 - @staticmethod - def new(newRules): - return Checkout() - def scan(self,sku): self.count(sku) if self.has_discount(sku): @@ -34,34 +30,21 @@ def apply_discount(self, sku): def count(self, sku): if self.copy_prices[sku]['repeat'] == 0: self.copy_prices[sku]['repeat'] = 1 - elif(self.copy_prices[sku]['repeat'] == 0 and self.copy_prices[sku]['specialPrice'] == 0): self.copy_prices[sku]['repeat'] = 0 else: self.copy_prices[sku]['repeat'] += 1 -class TestStringMethods(unittest.TestCase): def scanSKU(self,skus): - c = Checkout.new(prices) + self.total = 0 + self.copy_prices = deepcopy(prices) for sku in skus: - c.scan(sku) - print(c.total) - return c.total - - def test_totals(self): - self.assertEqual(self.scanSKU(''), 0 ) - self.assertEqual(self.scanSKU('A'), 50) - self.assertEqual(self.scanSKU('AB'), 80) - self.assertEqual(self.scanSKU('CDBA'), 115) - self.assertEqual(self.scanSKU('AA'), 100) - self.assertEqual(self.scanSKU('AAA'), 130) - self.assertEqual(self.scanSKU('AAAA'), 180) - self.assertEqual(self.scanSKU('AAAAA'), 230) - self.assertEqual(self.scanSKU('AAAAAA'), 260) - self.assertEqual(self.scanSKU('AAAB'), 160) - self.assertEqual(self.scanSKU('AAABB'), 175) - self.assertEqual(self.scanSKU('AAABBD'), 190) - self.assertEqual(self.scanSKU('DABABA'), 190) + self.scan(sku.upper()) + print(self.total) + return self.total -if __name__ == '__main__': - unittest.main() \ No newline at end of file + def scanUnit(self,skus): + for sku in skus: + self.scan(sku.upper()) + return self.total + \ No newline at end of file diff --git a/runTest.py b/runTest.py new file mode 100644 index 0000000..365e198 --- /dev/null +++ b/runTest.py @@ -0,0 +1,5 @@ +import unittest +from tests.test import * + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/test.py b/tests/test.py new file mode 100644 index 0000000..69e00a7 --- /dev/null +++ b/tests/test.py @@ -0,0 +1,30 @@ +import unittest +from checkout.checkout import Checkout +from rules import prices + +class CheckCartMethods(unittest.TestCase): + def setUp(self): + self.c = Checkout() + + def test_incremental(self): + self.assertEqual(self.c.scanUnit(''), 0 ) + self.assertEqual(self.c.scanUnit('A'), 50) + self.assertEqual(self.c.scanUnit('B'), 80) + self.assertEqual(self.c.scanUnit('A'), 130) + self.assertEqual(self.c.scanUnit('A'), 160) + self.assertEqual(self.c.scanUnit('B'), 175) + + def test_totals(self): + self.assertEqual(self.c.scanSKU(''), 0 ) + self.assertEqual(self.c.scanSKU('A'), 50) + self.assertEqual(self.c.scanSKU('AB'), 80) + self.assertEqual(self.c.scanSKU('CDBA'), 115) + self.assertEqual(self.c.scanSKU('AA'), 100) + self.assertEqual(self.c.scanSKU('AAA'), 130) + self.assertEqual(self.c.scanSKU('AAAA'), 180) + self.assertEqual(self.c.scanSKU('AAAAA'), 230) + self.assertEqual(self.c.scanSKU('AAAAAA'), 260) + self.assertEqual(self.c.scanSKU('AAAB'), 160) + self.assertEqual(self.c.scanSKU('AAABB'), 175) + self.assertEqual(self.c.scanSKU('AAABBD'), 190) + self.assertEqual(self.c.scanSKU('DABABA'), 190) From 97cd65b786694e0f63214f7aa700eadbcab9cf79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Ara=C3=BAjo?= Date: Mon, 10 Aug 2020 18:38:56 -0300 Subject: [PATCH 4/5] feat(whatsapp): Second Feature - User Find Text on chat --- whatsapp/findText.feature | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 whatsapp/findText.feature diff --git a/whatsapp/findText.feature b/whatsapp/findText.feature new file mode 100644 index 0000000..88a8194 --- /dev/null +++ b/whatsapp/findText.feature @@ -0,0 +1,34 @@ + @runFindTextFeature + Feature: Find previously messages + @critical + Scenario Outline: User search text successfully + Given I open Whatsapp Application + Then I'm on the chat screen + When I type on geral search textfield: + Then chat will be filtered + When I click on the first result + Then I am on private chat + And I assert all contains: are on highlight + + Examples: + | friendName | message | + | Renato Araújo | Job Apply | + | Juliana Freitas | Morning Juliaan! | + | Jhon Due Interviewer | celerisque | + | Grupo pao de alho | Grupo pao de alho| + + @critical + Scenario Outline: User search for no content text + Given I open Whatsapp Application + Then I'm on the chat screen + When I type on geral search textfield: + Then chat will be filtered + And no results message are displayed + + Examples: + | message | + | cuytruytdryutdrtrytdsrsxzedrartg@#@!! | + | :) follow my message with emoji to make your day even better | + | 01000011 01101111 01101110 01100011 01110010 01100101 01110100 01110010 01100101 | + + From 82a3cd067e71536e130c7dd314a61510a43ef28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Ara=C3=BAjo?= Date: Mon, 10 Aug 2020 18:47:14 -0300 Subject: [PATCH 5/5] MD updatea --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 2cf0614..84a6f6a 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,17 @@ O processo de Pull Request funciona da seguinte maneira: ### **ATENÇÃO** ### Não se deve tentar fazer o PUSH diretamente para ESTE repositório!!! + +### **Executar Codigo** ### + +### Installation: +- [Python](https://www.python.org/downloads/) + +### Running: +No terminal vá até a pasta do projeto e execute o seguinte comando: +>python runTest.py + +## Develop by: +Renato José + +[Site](http://www.renato.pw/) \ No newline at end of file