diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 352ac57e..6e4294c5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,6 @@ name: Build and Test -on: [push, pull_request] +on: [push] jobs: build-and-test: name: build-and-test diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index 2dc2b01d..00000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,1945 +0,0 @@ -SF:lib/src/common/paystack.dart -DA:21,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,0 -DA:37,1 -DA:42,1 -DA:43,0 -DA:50,1 -DA:54,2 -DA:56,2 -DA:57,2 -DA:58,1 -DA:59,1 -DA:60,1 -DA:61,1 -DA:64,1 -DA:65,0 -DA:71,1 -DA:73,0 -DA:75,0 -DA:79,0 -DA:81,0 -DA:84,0 -DA:98,0 -DA:103,0 -DA:105,0 -DA:107,0 -DA:137,0 -DA:144,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:164,0 -DA:166,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:180,0 -DA:186,0 -DA:188,0 -DA:191,0 -DA:192,0 -DA:196,0 -DA:203,0 -DA:204,0 -DA:206,0 -DA:207,0 -DA:208,0 -DA:211,0 -DA:212,0 -DA:213,0 -DA:214,0 -DA:219,0 -DA:221,0 -DA:224,0 -DA:230,0 -DA:238,4 -LF:59 -LH:17 -end_of_record -SF:lib/src/model/card.dart -DA:59,0 -DA:61,0 -DA:63,0 -DA:65,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:75,0 -DA:80,0 -DA:82,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:98,0 -DA:101,0 -DA:105,0 -DA:106,0 -DA:109,0 -DA:111,0 -DA:112,0 -DA:115,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:138,0 -DA:139,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:145,0 -DA:146,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:157,0 -DA:158,0 -DA:163,0 -DA:165,0 -DA:167,0 -DA:169,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:179,0 -DA:181,0 -DA:183,0 -DA:187,0 -DA:190,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:203,0 -DA:205,0 -DA:212,0 -DA:214,0 -DA:215,0 -DA:217,0 -DA:220,0 -DA:223,0 -DA:226,0 -DA:227,0 -DA:229,0 -DA:232,0 -DA:235,0 -DA:237,0 -DA:238,0 -DA:239,0 -DA:261,0 -DA:262,0 -DA:264,0 -DA:265,0 -DA:267,0 -DA:268,0 -DA:270,0 -DA:276,0 -DA:277,0 -DA:279,0 -DA:280,0 -DA:282,0 -DA:283,0 -DA:284,0 -DA:295,0 -DA:297,0 -DA:300,0 -DA:302,0 -DA:305,0 -DA:312,0 -DA:314,0 -DA:317,0 -DA:319,0 -DA:322,0 -DA:329,0 -DA:331,0 -DA:334,0 -DA:336,0 -DA:339,0 -DA:346,0 -DA:348,0 -DA:351,0 -DA:353,0 -DA:356,0 -DA:363,0 -DA:365,0 -DA:368,0 -DA:370,0 -DA:373,0 -DA:380,0 -DA:382,0 -DA:385,0 -DA:387,0 -DA:390,0 -DA:397,0 -DA:399,0 -DA:402,0 -DA:404,0 -DA:407,0 -LF:135 -LH:0 -end_of_record -SF:lib/src/model/charge.dart -DA:29,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:48,0 -DA:49,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:67,0 -DA:69,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:76,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:83,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:91,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:98,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:105,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:113,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:120,0 -DA:122,0 -DA:125,0 -DA:127,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:144,0 -DA:145,0 -DA:148,0 -DA:149,0 -DA:153,0 -DA:156,0 -DA:159,0 -DA:162,0 -DA:163,0 -DA:165,0 -DA:168,0 -DA:171,0 -DA:174,0 -DA:175,0 -DA:177,0 -DA:181,1 -DA:182,1 -DA:183,1 -LF:82 -LH:3 -end_of_record -SF:lib/src/common/transaction.dart -DA:8,0 -DA:9,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:16,0 -DA:18,0 -DA:20,0 -DA:22,0 -DA:23,0 -LF:10 -LH:0 -end_of_record -SF:lib/src/common/exceptions.dart -DA:6,0 -DA:8,0 -DA:10,0 -DA:11,0 -DA:16,0 -DA:20,0 -DA:24,0 -DA:28,0 -DA:34,0 -DA:35,0 -DA:42,0 -DA:46,0 -DA:50,0 -DA:51,0 -LF:14 -LH:0 -end_of_record -SF:lib/src/model/checkout_response.dart -DA:34,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:41,0 -DA:44,0 -DA:52,0 -DA:54,0 -DA:56,0 -LF:12 -LH:0 -end_of_record -SF:lib/src/api/model/transaction_api_response.dart -DA:10,0 -DA:11,0 -DA:12,0 -DA:15,0 -DA:16,0 -DA:17,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:22,0 -DA:23,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:29,0 -DA:30,0 -DA:33,0 -DA:34,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:45,0 -DA:46,0 -DA:49,0 -DA:50,0 -DA:54,0 -DA:57,0 -DA:58,0 -DA:61,0 -DA:62,0 -DA:65,0 -DA:67,0 -DA:68,0 -DA:69,0 -LF:37 -LH:0 -end_of_record -SF:lib/src/api/request/bank_charge_request_body.dart -DA:12,0 -DA:13,0 -DA:14,0 -DA:16,0 -DA:18,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:27,0 -DA:29,0 -DA:31,0 -DA:33,0 -LF:12 -LH:0 -end_of_record -SF:lib/src/api/request/base_request_body.dart -DA:7,0 -DA:8,0 -DA:13,0 -DA:15,0 -DA:16,0 -DA:17,0 -LF:6 -LH:0 -end_of_record -SF:lib/src/widgets/checkout/bank_checkout.dart -DA:21,0 -DA:27,0 -DA:28,0 -DA:41,0 -DA:42,0 -DA:44,0 -DA:46,0 -DA:47,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:55,0 -DA:56,0 -DA:59,0 -DA:61,0 -DA:62,0 -DA:65,0 -DA:67,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:80,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:92,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:113,0 -DA:114,0 -DA:120,0 -DA:121,0 -DA:125,0 -DA:126,0 -DA:134,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:140,0 -DA:145,0 -DA:146,0 -DA:147,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:157,0 -DA:160,0 -DA:161,0 -DA:163,0 -DA:165,0 -DA:168,0 -DA:169,0 -DA:170,0 -DA:172,0 -DA:174,0 -DA:175,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:181,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:207,0 -DA:208,0 -DA:213,0 -DA:214,0 -DA:218,0 -DA:219,0 -DA:223,0 -DA:224,0 -DA:227,0 -DA:228,0 -DA:229,0 -DA:231,0 -DA:232,0 -DA:236,0 -DA:237,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:244,0 -DA:245,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:256,0 -DA:259,0 -DA:261,0 -DA:262,0 -DA:263,0 -DA:265,0 -DA:266,0 -DA:272,0 -DA:273,0 -DA:283,0 -DA:285,0 -DA:287,0 -DA:295,0 -DA:297,0 -DA:298,0 -DA:302,0 -DA:308,0 -DA:310,0 -LF:128 -LH:0 -end_of_record -SF:lib/src/common/platform_info.dart -DA:7,2 -DA:8,1 -DA:10,1 -DA:11,1 -DA:14,1 -DA:16,1 -DA:18,1 -DA:20,1 -DA:22,0 -DA:23,0 -DA:27,0 -DA:28,0 -DA:32,0 -DA:33,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:43,0 -DA:45,0 -LF:19 -LH:8 -end_of_record -SF:lib/src/api/request/card_request_body.dart -DA:41,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:50,0 -DA:51,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:65,0 -DA:66,0 -DA:69,0 -DA:72,0 -DA:75,0 -DA:82,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:92,0 -DA:93,0 -DA:95,0 -DA:96,0 -DA:98,0 -DA:99,0 -DA:101,0 -DA:102,0 -DA:104,0 -DA:105,0 -DA:107,0 -DA:108,0 -DA:110,0 -DA:111,0 -DA:113,0 -DA:114,0 -DA:116,0 -DA:117,0 -DA:119,0 -DA:120,0 -DA:122,0 -DA:123,0 -LF:52 -LH:0 -end_of_record -SF:lib/src/common/card_utils.dart -DA:8,0 -DA:13,0 -DA:14,0 -DA:22,0 -DA:23,0 -DA:28,0 -DA:29,0 -DA:32,0 -DA:33,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:44,0 -DA:45,0 -DA:49,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:63,0 -DA:67,0 -DA:68,0 -DA:73,0 -DA:75,0 -DA:78,0 -DA:80,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:86,0 -DA:89,0 -DA:92,0 -DA:93,0 -DA:96,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:103,0 -DA:108,0 -DA:113,0 -DA:114,0 -DA:115,0 -LF:47 -LH:0 -end_of_record -SF:lib/src/common/crypto.dart -DA:6,0 -DA:7,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:13,0 -DA:14,0 -DA:17,0 -DA:20,0 -DA:22,0 -LF:10 -LH:0 -end_of_record -SF:lib/src/api/request/validate_request_body.dart -DA:9,0 -DA:11,0 -DA:12,0 -DA:13,0 -LF:4 -LH:0 -end_of_record -SF:lib/src/api/service/bank_service.dart -DA:13,0 -DA:15,0 -DA:17,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:27,0 -DA:30,0 -DA:31,0 -DA:34,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:44,0 -DA:45,0 -DA:48,0 -DA:49,0 -DA:51,0 -DA:53,0 -DA:55,0 -DA:56,0 -DA:58,0 -LF:23 -LH:0 -end_of_record -SF:lib/src/api/service/card_service.dart -DA:12,0 -DA:13,0 -DA:16,0 -DA:17,0 -DA:19,0 -DA:22,0 -DA:23,0 -DA:24,0 -DA:26,0 -DA:27,0 -DA:30,0 -DA:35,0 -DA:37,0 -DA:40,0 -DA:41,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:48,0 -DA:53,0 -DA:54,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:63,0 -LF:29 -LH:0 -end_of_record -SF:lib/src/common/string_utils.dart -DA:2,0 -DA:3,0 -DA:6,0 -DA:7,0 -DA:8,0 -DA:9,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:14,0 -DA:15,0 -DA:21,0 -DA:22,0 -LF:13 -LH:0 -end_of_record -SF:lib/src/common/utils.dart -DA:15,3 -DA:17,4 -DA:21,2 -DA:22,2 -DA:23,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:49,0 -DA:56,0 -DA:58,0 -DA:60,0 -DA:62,0 -DA:65,0 -DA:66,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:75,0 -DA:77,0 -DA:78,0 -DA:80,0 -DA:81,0 -LF:30 -LH:4 -end_of_record -SF:lib/src/transaction/card_transaction_manager.dart -DA:21,0 -DA:27,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:43,0 -DA:44,0 -DA:46,0 -DA:47,0 -DA:50,0 -DA:51,0 -DA:53,0 -DA:57,0 -DA:59,0 -DA:61,0 -DA:65,0 -DA:67,0 -DA:69,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:79,0 -DA:81,0 -DA:82,0 -DA:85,0 -DA:88,0 -DA:89,0 -DA:92,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:101,0 -DA:102,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:141,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:145,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:156,0 -DA:160,0 -DA:163,0 -DA:165,0 -DA:168,0 -DA:170,0 -DA:171,0 -DA:175,0 -DA:176,0 -DA:177,0 -LF:77 -LH:0 -end_of_record -SF:lib/src/widgets/checkout/checkout_widget.dart -DA:23,0 -DA:30,0 -DA:31,0 -DA:48,0 -DA:50,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:66,0 -DA:67,0 -DA:71,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:78,0 -DA:80,0 -DA:83,0 -DA:84,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:93,0 -DA:98,0 -DA:99,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:112,0 -DA:121,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:155,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:166,0 -DA:172,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:179,0 -DA:185,0 -DA:186,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:194,0 -DA:195,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:204,0 -DA:208,0 -DA:217,0 -DA:218,0 -DA:219,0 -DA:220,0 -DA:221,0 -DA:225,0 -DA:229,0 -DA:231,0 -DA:233,0 -DA:234,0 -DA:236,0 -DA:239,0 -DA:240,0 -DA:241,0 -DA:247,0 -DA:248,0 -DA:251,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:268,0 -DA:269,0 -DA:270,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:276,0 -DA:277,0 -DA:278,0 -DA:279,0 -DA:280,0 -DA:281,0 -DA:284,0 -DA:287,0 -DA:288,0 -DA:289,0 -DA:290,0 -DA:295,0 -DA:296,0 -DA:297,0 -DA:304,0 -DA:305,0 -DA:308,0 -DA:309,0 -DA:310,0 -DA:311,0 -DA:313,0 -DA:317,0 -DA:318,0 -DA:319,0 -DA:320,0 -DA:321,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:328,0 -DA:329,0 -DA:333,0 -DA:335,0 -DA:336,0 -DA:337,0 -DA:340,0 -DA:347,0 -DA:348,0 -DA:349,0 -DA:350,0 -DA:351,0 -DA:354,0 -DA:355,0 -DA:356,0 -DA:357,0 -DA:359,0 -DA:360,0 -DA:361,0 -DA:362,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:368,0 -DA:369,0 -DA:370,0 -DA:371,0 -DA:372,0 -DA:373,0 -DA:376,0 -DA:377,0 -DA:378,0 -DA:379,0 -DA:384,0 -DA:385,0 -DA:386,0 -DA:387,0 -DA:388,0 -DA:390,0 -DA:394,0 -DA:396,0 -DA:399,0 -DA:400,0 -DA:402,0 -DA:403,0 -DA:404,0 -DA:406,0 -DA:407,0 -DA:412,0 -DA:413,0 -LF:189 -LH:0 -end_of_record -SF:lib/src/transaction/bank_transaction_manager.dart -DA:18,0 -DA:24,0 -DA:32,0 -DA:33,0 -DA:34,0 -DA:37,0 -DA:39,0 -DA:40,0 -DA:43,0 -DA:45,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:55,0 -DA:56,0 -DA:59,0 -DA:61,0 -DA:62,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:71,0 -DA:73,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:81,0 -DA:82,0 -DA:86,0 -DA:87,0 -DA:91,0 -DA:92,0 -DA:96,0 -DA:97,0 -DA:100,0 -DA:102,0 -DA:103,0 -DA:106,0 -DA:108,0 -DA:109,0 -LF:42 -LH:0 -end_of_record -SF:lib/src/transaction/base_transaction_manager.dart -DA:27,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:41,0 -DA:43,0 -DA:45,0 -DA:46,0 -DA:49,0 -DA:51,0 -DA:53,0 -DA:59,0 -DA:61,0 -DA:64,0 -DA:66,0 -DA:69,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:76,0 -DA:77,0 -DA:79,0 -DA:82,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:91,0 -DA:93,0 -DA:95,0 -DA:96,0 -DA:98,0 -DA:99,0 -DA:101,0 -DA:102,0 -DA:104,0 -DA:105,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:112,0 -DA:114,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:121,0 -DA:122,0 -DA:124,0 -DA:128,0 -DA:130,0 -DA:133,0 -DA:134,0 -DA:136,0 -DA:138,0 -DA:141,0 -DA:142,0 -DA:144,0 -DA:145,0 -DA:147,0 -DA:148,0 -DA:150,0 -DA:154,0 -DA:155,0 -DA:157,0 -DA:158,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:164,0 -DA:165,0 -DA:167,0 -DA:171,0 -DA:175,0 -DA:179,0 -LF:76 -LH:0 -end_of_record -SF:lib/src/widgets/birthday_widget.dart -DA:15,0 -DA:17,0 -DA:18,0 -DA:25,0 -DA:27,0 -DA:28,0 -DA:31,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:58,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:68,0 -DA:69,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:74,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:95,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:100,0 -DA:104,0 -DA:109,0 -DA:111,0 -DA:112,0 -DA:114,0 -DA:119,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:134,0 -DA:137,0 -DA:141,0 -DA:143,0 -DA:152,0 -DA:165,0 -DA:166,0 -DA:169,0 -DA:170,0 -DA:173,0 -DA:174,0 -DA:177,0 -DA:178,0 -DA:179,0 -LF:68 -LH:0 -end_of_record -SF:lib/src/widgets/card_widget.dart -DA:11,0 -DA:13,0 -DA:15,0 -DA:20,0 -DA:22,0 -DA:23,0 -DA:26,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:40,0 -DA:43,0 -DA:45,0 -DA:46,0 -DA:48,0 -DA:51,0 -DA:53,0 -DA:54,0 -DA:66,0 -DA:67,0 -LF:23 -LH:0 -end_of_record -SF:lib/src/widgets/otp_widget.dart -DA:11,0 -DA:13,0 -DA:14,0 -DA:23,0 -DA:25,0 -DA:26,0 -DA:29,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:41,0 -DA:42,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:79,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:84,0 -DA:86,0 -DA:87,0 -LF:37 -LH:0 -end_of_record -SF:lib/src/widgets/pin_widget.dart -DA:9,0 -DA:10,0 -DA:16,0 -DA:18,0 -DA:19,0 -DA:22,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:28,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:61,0 -DA:62,0 -DA:68,0 -DA:70,0 -DA:71,0 -DA:73,0 -DA:76,0 -DA:78,0 -DA:79,0 -DA:80,0 -LF:29 -LH:0 -end_of_record -SF:lib/src/widgets/animated_widget.dart -DA:8,0 -DA:10,0 -DA:19,0 -DA:21,0 -DA:22,0 -DA:23,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:29,0 -DA:41,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:49,0 -DA:52,0 -DA:54,0 -DA:55,0 -DA:58,0 -DA:60,0 -DA:61,0 -DA:62,0 -LF:23 -LH:0 -end_of_record -SF:lib/src/widgets/base_widget.dart -DA:13,0 -DA:15,0 -DA:16,0 -DA:17,0 -DA:23,0 -DA:24,0 -DA:28,0 -DA:29,0 -DA:31,0 -DA:32,0 -DA:36,0 -DA:38,0 -DA:39,0 -DA:41,0 -DA:42,0 -DA:45,0 -DA:46,0 -DA:50,0 -DA:53,0 -DA:54,0 -DA:60,0 -DA:62,0 -DA:63,0 -DA:65,0 -DA:66,0 -DA:69,0 -DA:71,0 -DA:72,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:85,0 -DA:90,0 -DA:91,0 -DA:93,0 -DA:97,0 -LF:36 -LH:0 -end_of_record -SF:lib/src/widgets/buttons.dart -DA:8,0 -DA:15,0 -DA:21,0 -DA:23,0 -DA:37,0 -DA:43,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:52,0 -DA:67,0 -DA:78,0 -DA:82,0 -DA:83,0 -DA:84,0 -DA:86,0 -DA:89,0 -DA:93,0 -DA:95,0 -DA:97,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -LF:38 -LH:0 -end_of_record -SF:lib/src/widgets/custom_dialog.dart -DA:9,0 -DA:18,0 -DA:19,0 -DA:29,0 -DA:31,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:53,0 -DA:56,0 -DA:58,0 -DA:59,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:68,0 -DA:72,0 -DA:74,0 -DA:75,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:85,0 -DA:86,0 -DA:88,0 -DA:96,0 -DA:98,0 -DA:100,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:113,0 -DA:114,0 -DA:116,0 -DA:125,0 -DA:127,0 -DA:131,0 -DA:140,0 -DA:146,0 -DA:153,0 -DA:155,0 -DA:156,0 -DA:158,0 -DA:159,0 -DA:160,0 -DA:166,0 -DA:167,0 -DA:168,0 -DA:169,0 -DA:170,1 -DA:171,0 -DA:173,0 -DA:176,0 -LF:62 -LH:1 -end_of_record -SF:lib/src/widgets/input/card_input.dart -DA:14,0 -DA:16,0 -DA:17,0 -DA:27,0 -DA:29,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:34,0 -DA:35,0 -DA:38,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:45,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:59,0 -DA:62,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:85,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:96,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:100,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:114,0 -DA:118,0 -DA:120,0 -DA:123,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:130,0 -DA:133,0 -DA:136,0 -DA:139,0 -DA:142,0 -DA:145,0 -DA:151,0 -DA:152,0 -LF:75 -LH:0 -end_of_record -SF:lib/src/widgets/checkout/base_checkout.dart -DA:15,0 -DA:17,0 -DA:19,0 -DA:26,0 -DA:30,0 -DA:36,0 -LF:6 -LH:0 -end_of_record -SF:lib/src/widgets/input/account_field.dart -DA:7,0 -DA:8,0 -DA:12,0 -DA:13,0 -DA:14,0 -DA:18,0 -DA:19,0 -DA:20,0 -LF:8 -LH:0 -end_of_record -SF:lib/src/widgets/checkout/card_checkout.dart -DA:21,0 -DA:28,0 -DA:29,0 -DA:35,0 -DA:36,0 -DA:38,0 -DA:40,0 -DA:42,0 -DA:44,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:52,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:75,0 -DA:79,0 -DA:80,0 -DA:84,0 -DA:85,0 -DA:88,0 -DA:89,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:97,0 -DA:101,0 -DA:102,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:109,0 -DA:110,0 -DA:115,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:124,0 -DA:125,0 -LF:50 -LH:0 -end_of_record -SF:lib/src/widgets/checkout/checkout_method.dart -DA:8,0 -LF:1 -LH:0 -end_of_record -SF:lib/src/widgets/error_widget.dart -DA:16,0 -DA:24,0 -DA:28,0 -DA:33,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:41,0 -DA:43,0 -DA:44,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:72,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:82,0 -LF:28 -LH:0 -end_of_record -SF:lib/src/widgets/sucessful_widget.dart -DA:9,0 -DA:11,0 -DA:13,0 -DA:28,0 -DA:30,0 -DA:31,0 -DA:35,0 -DA:37,0 -DA:39,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:45,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:57,0 -DA:60,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:65,0 -DA:68,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:73,0 -DA:74,0 -DA:76,0 -DA:77,0 -DA:78,0 -DA:84,0 -DA:93,0 -DA:96,0 -DA:97,0 -DA:98,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:115,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:135,0 -DA:136,0 -LF:56 -LH:0 -end_of_record -SF:lib/src/widgets/common/input_formatters.dart -DA:6,0 -DA:9,0 -DA:11,0 -DA:15,0 -DA:16,0 -DA:17,0 -DA:18,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:23,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:31,0 -DA:36,0 -DA:39,0 -DA:41,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:54,0 -DA:55,0 -DA:57,0 -DA:61,0 -DA:66,0 -LF:29 -LH:0 -end_of_record -SF:lib/src/widgets/input/base_field.dart -DA:14,0 -DA:23,0 -DA:25,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:33,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:39,0 -DA:41,0 -DA:43,0 -DA:48,0 -DA:50,0 -DA:52,0 -DA:53,0 -LF:19 -LH:0 -end_of_record -SF:lib/src/widgets/input/cvc_field.dart -DA:8,0 -DA:10,0 -DA:14,0 -DA:16,0 -DA:17,0 -DA:18,0 -DA:19,0 -DA:23,0 -DA:24,0 -DA:26,0 -LF:10 -LH:0 -end_of_record -SF:lib/src/widgets/input/date_field.dart -DA:10,0 -DA:12,0 -DA:16,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:25,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:32,0 -DA:35,0 -DA:39,0 -DA:40,0 -DA:48,0 -DA:49,0 -DA:52,0 -DA:53,0 -DA:56,0 -DA:57,0 -DA:60,0 -LF:22 -LH:0 -end_of_record -SF:lib/src/widgets/input/number_field.dart -DA:10,0 -DA:15,0 -DA:21,0 -DA:22,0 -DA:23,0 -DA:24,0 -DA:25,0 -DA:29,0 -DA:30,0 -DA:34,0 -DA:36,0 -LF:11 -LH:0 -end_of_record -SF:lib/src/widgets/input/otp_field.dart -DA:5,0 -DA:6,0 -DA:9,0 -DA:16,0 -DA:17,0 -DA:21,0 -DA:23,0 -DA:24,0 -DA:29,0 -DA:31,0 -DA:32,0 -LF:11 -LH:0 -end_of_record -SF:lib/src/widgets/input/pin_field.dart -DA:8,0 -DA:10,0 -DA:11,0 -DA:15,0 -DA:17,0 -DA:19,0 -DA:22,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:34,0 -DA:35,0 -DA:42,0 -DA:44,0 -DA:46,0 -DA:47,0 -DA:48,0 -LF:17 -LH:0 -end_of_record diff --git a/lib/flutter_paystack.dart b/lib/flutter_paystack.dart index 8eb88b02..346b001d 100644 --- a/lib/flutter_paystack.dart +++ b/lib/flutter_paystack.dart @@ -1,7 +1,7 @@ // Expose the following files -export 'package:flutter_paystack/src/model/card.dart'; +export 'package:flutter_paystack/src/common/exceptions.dart'; export 'package:flutter_paystack/src/common/paystack.dart' hide Paystack; +export 'package:flutter_paystack/src/model/card.dart'; export 'package:flutter_paystack/src/model/charge.dart'; -export 'package:flutter_paystack/src/common/transaction.dart'; -export 'package:flutter_paystack/src/common/exceptions.dart'; export 'package:flutter_paystack/src/model/checkout_response.dart'; +export 'package:flutter_paystack/src/model/transaction.dart'; diff --git a/lib/src/common/paystack.dart b/lib/src/common/paystack.dart index 157bbcc8..e00b5e54 100644 --- a/lib/src/common/paystack.dart +++ b/lib/src/common/paystack.dart @@ -6,14 +6,15 @@ import 'package:flutter/services.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/my_strings.dart'; import 'package:flutter_paystack/src/common/platform_info.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; import 'package:flutter_paystack/src/common/utils.dart'; import 'package:flutter_paystack/src/model/card.dart'; import 'package:flutter_paystack/src/model/charge.dart'; import 'package:flutter_paystack/src/model/checkout_response.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/transaction/card_transaction_manager.dart'; import 'package:flutter_paystack/src/widgets/checkout/checkout_widget.dart'; +// TODO: Remove use of static publicKey and use a constructor for initialization class PaystackPlugin { static bool _sdkInitialized = false; static String _publicKey; @@ -68,6 +69,11 @@ class PaystackPlugin { } } + static dispose() { + _publicKey = null; + _sdkInitialized = false; + } + static bool get sdkInitialized => _sdkInitialized; static String get publicKey { @@ -79,9 +85,6 @@ class PaystackPlugin { static void _performChecks() { //validate that sdk has been initialized Utils.validateSdkInitialized(); - - //validate public keys - Utils.hasPublicKey(); } /// Make payment by charging the user's card diff --git a/lib/src/common/string_utils.dart b/lib/src/common/string_utils.dart index 374f59ea..599af3d9 100644 --- a/lib/src/common/string_utils.dart +++ b/lib/src/common/string_utils.dart @@ -4,14 +4,8 @@ class StringUtils { } static bool isValidEmail(String email) { - String p = r"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + - "\\@" + - "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + - "(" + - "\\." + - "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + - ")+"; - RegExp regExp = new RegExp(p); + if (isEmpty(email)) return false; + RegExp regExp = new RegExp(_emailRegex); return regExp.hasMatch(email); } @@ -25,3 +19,11 @@ class StringUtils { return value; } } + +const _emailRegex = r"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + + "\\@" + + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + + "(" + + "\\." + + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + + ")+"; diff --git a/lib/src/common/utils.dart b/lib/src/common/utils.dart index 464e84ea..2ae73613 100644 --- a/lib/src/common/utils.dart +++ b/lib/src/common/utils.dart @@ -5,6 +5,7 @@ import 'package:async/async.dart'; import 'package:flutter/services.dart'; import 'package:flutter_paystack/flutter_paystack.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; +import 'package:flutter_paystack/src/common/string_utils.dart'; import 'package:flutter_paystack/src/widgets/checkout/bank_checkout.dart'; import 'package:http/http.dart' as http; import 'package:intl/intl.dart'; @@ -38,14 +39,6 @@ class Utils { } } - static hasPublicKey() { - var publicKey = PaystackPlugin.publicKey; - if (publicKey == null || publicKey.isEmpty) { - throw PaystackException( - 'No Public key found, please set the Public key.'); - } - } - static String getKeyErrorMsg(String keyType) { return 'Invalid $keyType key. You must use a valid $keyType key. Ensure that you ' 'have set a $keyType key. Check http://paystack.co for more'; @@ -77,7 +70,7 @@ class Utils { if (charge.amount == null || charge.amount.isNegative) { throw new InvalidAmountException(charge.amount); } - if (charge.email == null || charge.email.isEmpty) { + if (!StringUtils.isValidEmail(charge.email)) { throw new InvalidEmailException(charge.email); } } diff --git a/lib/src/model/charge.dart b/lib/src/model/charge.dart index e4cf26fb..33cc3947 100644 --- a/lib/src/model/charge.dart +++ b/lib/src/model/charge.dart @@ -1,15 +1,18 @@ import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/my_strings.dart'; -import 'package:flutter_paystack/src/common/string_utils.dart'; import 'package:flutter_paystack/src/model/card.dart'; import 'package:flutter_paystack/src/widgets/checkout/bank_checkout.dart'; class Charge { PaymentCard card; - String _email; + + /// The email of the customer + String email; String _accessCode; BankAccount _account; - int _amount = 0; + + /// Amount to pay in base currency. Must be a valid positive number + int amount = 0; Map _metadata; List> _customFields; bool _hasMeta = false; @@ -51,7 +54,7 @@ class Charge { Charge() { this._metadata = {}; - this._amount = -1; + this.amount = -1; this._additionalParameters = {}; this._customFields = []; this._metadata['custom_fields'] = this._customFields; @@ -82,7 +85,9 @@ class Charge { String get currency => _currency; - /// ISO 4217 payment currency code (e.g USD). Defaults to [Strings.ngn] + /// ISO 4217 payment currency code (e.g USD). Defaults to [Strings.ngn]. + /// + /// If you're setting this value, also set [locale] for better formatting. set currency(String value) { _beforeLocalSet('currency'); _currency = value; @@ -152,30 +157,6 @@ class Charge { return _metadata.toString(); } - - String get email => _email; - - /// The email of the customer - set email(String value) { - // _beforeLocalSet('email'); Not needed because of PaystackPlugin.checkout. Email - // is needed for the checkout ui even after setting access code. - if (!StringUtils.isValidEmail(value)) { - throw InvalidEmailException(value); - } - _email = value; - } - - int get amount => _amount; - - /// Amount to pay in base currency. Must be a valid positive number - set amount(int value) { - // _beforeLocalSet('amount'); Not needed because of PaystackPlugin.checkout. Amount - // is needed for the checkout ui even after setting access code. - if (value <= 0) { - throw InvalidAmountException(value); - } - _amount = value; - } } enum Bearer { diff --git a/lib/src/common/transaction.dart b/lib/src/model/transaction.dart similarity index 100% rename from lib/src/common/transaction.dart rename to lib/src/model/transaction.dart diff --git a/lib/src/transaction/bank_transaction_manager.dart b/lib/src/transaction/bank_transaction_manager.dart index 8ee54a06..1b115430 100644 --- a/lib/src/transaction/bank_transaction_manager.dart +++ b/lib/src/transaction/bank_transaction_manager.dart @@ -6,9 +6,9 @@ import 'package:flutter_paystack/src/api/request/bank_charge_request_body.dart'; import 'package:flutter_paystack/src/api/service/bank_service.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/my_strings.dart'; -import 'package:flutter_paystack/src/model/charge.dart'; import 'package:flutter_paystack/src/common/paystack.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; +import 'package:flutter_paystack/src/model/charge.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/transaction/base_transaction_manager.dart'; class BankTransactionManager extends BaseTransactionManager { diff --git a/lib/src/transaction/base_transaction_manager.dart b/lib/src/transaction/base_transaction_manager.dart index 2e08dd06..6b109845 100644 --- a/lib/src/transaction/base_transaction_manager.dart +++ b/lib/src/transaction/base_transaction_manager.dart @@ -6,10 +6,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_paystack/src/api/model/transaction_api_response.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/paystack.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; import 'package:flutter_paystack/src/common/utils.dart'; import 'package:flutter_paystack/src/model/card.dart'; import 'package:flutter_paystack/src/model/charge.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/widgets/birthday_widget.dart'; import 'package:flutter_paystack/src/widgets/card_widget.dart'; import 'package:flutter_paystack/src/widgets/otp_widget.dart'; diff --git a/lib/src/transaction/card_transaction_manager.dart b/lib/src/transaction/card_transaction_manager.dart index 6792bf4b..96103e0a 100644 --- a/lib/src/transaction/card_transaction_manager.dart +++ b/lib/src/transaction/card_transaction_manager.dart @@ -8,8 +8,8 @@ import 'package:flutter_paystack/src/api/service/card_service.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/my_strings.dart'; import 'package:flutter_paystack/src/common/paystack.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; import 'package:flutter_paystack/src/model/charge.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/transaction/base_transaction_manager.dart'; class CardTransactionManager extends BaseTransactionManager { diff --git a/lib/src/widgets/checkout/bank_checkout.dart b/lib/src/widgets/checkout/bank_checkout.dart index 40f470a0..ce05eb01 100644 --- a/lib/src/widgets/checkout/bank_checkout.dart +++ b/lib/src/widgets/checkout/bank_checkout.dart @@ -3,10 +3,10 @@ import 'dart:async'; import 'package:async/async.dart'; import 'package:flutter/material.dart'; import 'package:flutter_paystack/src/common/paystack.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; import 'package:flutter_paystack/src/common/utils.dart'; import 'package:flutter_paystack/src/model/charge.dart'; import 'package:flutter_paystack/src/model/checkout_response.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/transaction/bank_transaction_manager.dart'; import 'package:flutter_paystack/src/widgets/buttons.dart'; import 'package:flutter_paystack/src/widgets/checkout/base_checkout.dart'; diff --git a/lib/src/widgets/checkout/card_checkout.dart b/lib/src/widgets/checkout/card_checkout.dart index 80a5eabb..35caafaa 100644 --- a/lib/src/widgets/checkout/card_checkout.dart +++ b/lib/src/widgets/checkout/card_checkout.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_paystack/src/common/exceptions.dart'; import 'package:flutter_paystack/src/common/my_strings.dart'; import 'package:flutter_paystack/src/common/paystack.dart'; -import 'package:flutter_paystack/src/common/transaction.dart'; import 'package:flutter_paystack/src/common/utils.dart'; import 'package:flutter_paystack/src/model/card.dart'; import 'package:flutter_paystack/src/model/charge.dart'; import 'package:flutter_paystack/src/model/checkout_response.dart'; +import 'package:flutter_paystack/src/model/transaction.dart'; import 'package:flutter_paystack/src/transaction/card_transaction_manager.dart'; import 'package:flutter_paystack/src/widgets/checkout/base_checkout.dart'; import 'package:flutter_paystack/src/widgets/checkout/checkout_widget.dart'; diff --git a/test/src/common/cart_utils_test.dart b/test/src/common/card_utils_test.dart similarity index 50% rename from test/src/common/cart_utils_test.dart rename to test/src/common/card_utils_test.dart index a88ec467..e8e4c7c4 100644 --- a/test/src/common/cart_utils_test.dart +++ b/test/src/common/card_utils_test.dart @@ -2,22 +2,23 @@ import 'package:flutter_paystack/flutter_paystack.dart'; import 'package:flutter_paystack/src/common/card_utils.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:matcher/matcher.dart'; -import 'package:meta/meta.dart'; + +import 'case.dart'; void main() { group("$CardUtils", () { group("#isWholeNumberPositive", () { final cases = [ - _Case(inp: "12", out: true), - _Case(inp: "+9876567", out: false), - _Case(inp: "hgfdfghjk", out: false), - _Case(inp: "KDHJIWUHE", out: false), - _Case(inp: "-1-2-84ufpo", out: false), - _Case(inp: "一些角色", out: false), - _Case(inp: "九十", out: false), - _Case(inp: "девяносто", out: false), - _Case(inp: "09765678987656789876545678987656789876545678", out: true), - _Case(inp: null, out: false), + Case(inp: "12", out: true), + Case(inp: "+9876567", out: false), + Case(inp: "hgfdfghjk", out: false), + Case(inp: "KDHJIWUHE", out: false), + Case(inp: "-1-2-84ufpo", out: false), + Case(inp: "一些角色", out: false), + Case(inp: "九十", out: false), + Case(inp: "девяносто", out: false), + Case(inp: "09765678987656789876545678987656789876545678", out: true), + Case(inp: null, out: false), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -29,20 +30,20 @@ void main() { group("#convertYearTo4Digits", () { final cases = [ - _Case(inp: 10, out: 2010), - _Case(inp: 100, out: 100), - _Case(inp: 1000, out: 1000), - _Case(inp: 20, out: 2020), - _Case(inp: 2000, out: 2000), - _Case(inp: 94, out: 2094), - _Case(inp: 2020, out: 2020), - _Case(inp: 87656776, out: 87656776), - _Case(inp: 8, out: 2008), - _Case(inp: 0, out: 2000), - _Case(inp: -10, out: -10), - _Case(inp: -0, out: 2000), - _Case(inp: -88, out: -88), - _Case(inp: null, out: 0), + Case(inp: 10, out: 2010), + Case(inp: 100, out: 100), + Case(inp: 1000, out: 1000), + Case(inp: 20, out: 2020), + Case(inp: 2000, out: 2000), + Case(inp: 94, out: 2094), + Case(inp: 2020, out: 2020), + Case(inp: 87656776, out: 87656776), + Case(inp: 8, out: 2008), + Case(inp: 0, out: 2000), + Case(inp: -10, out: -10), + Case(inp: -0, out: 2000), + Case(inp: -88, out: -88), + Case(inp: null, out: 0), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -54,20 +55,20 @@ void main() { group("#hasYearPassed", () { final cases = [ - _Case(inp: 10, out: true), - _Case(inp: 100, out: true), - _Case(inp: 1000, out: true), - _Case(inp: 20, out: false), - _Case(inp: 2000, out: true), - _Case(inp: 94, out: false), - _Case(inp: 2020, out: false), - _Case(inp: 87656776, out: false), - _Case(inp: 8, out: true), - _Case(inp: 0, out: true), - _Case(inp: -10, out: true), - _Case(inp: -0, out: true), - _Case(inp: -88, out: true), - _Case(inp: null, out: true), + Case(inp: 10, out: true), + Case(inp: 100, out: true), + Case(inp: 1000, out: true), + Case(inp: 20, out: false), + Case(inp: 2000, out: true), + Case(inp: 94, out: false), + Case(inp: 2020, out: false), + Case(inp: 87656776, out: false), + Case(inp: 8, out: true), + Case(inp: 0, out: true), + Case(inp: -10, out: true), + Case(inp: -0, out: true), + Case(inp: -88, out: true), + Case(inp: null, out: true), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -79,17 +80,17 @@ void main() { group("#hasMonthPassed", () { final cases = [ - _Case(inp: [2020, 10], out: false), - _Case(inp: [10, 0], out: true), - _Case(inp: [0, 0], out: true), - _Case(inp: [1994, 1], out: true), - _Case(inp: [1, 1], out: true), - _Case(inp: [-203, -13], out: true), - _Case(inp: [22, 10], out: false), - _Case(inp: [2020, 05], out: false), - _Case(inp: [null, 05], out: true), - _Case(inp: [24, null], out: true), - _Case(inp: [null, null], out: true), + Case(inp: [2020, 10], out: false), + Case(inp: [10, 0], out: true), + Case(inp: [0, 0], out: true), + Case(inp: [1994, 1], out: true), + Case(inp: [1, 1], out: true), + Case(inp: [-203, -13], out: true), + Case(inp: [22, 10], out: false), + Case(inp: [2020, 05], out: false), + Case(inp: [null, 05], out: true), + Case(inp: [24, null], out: true), + Case(inp: [null, null], out: true), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -101,14 +102,14 @@ void main() { group("#isValidMonth", () { final cases = [ - _Case(inp: 10, out: true), - _Case(inp: 0, out: false), - _Case(inp: -2, out: false), - _Case(inp: 1, out: true), - _Case(inp: 193873, out: false), - _Case(inp: 8, out: true), - _Case(inp: 012, out: true), - _Case(inp: null, out: false), + Case(inp: 10, out: true), + Case(inp: 0, out: false), + Case(inp: -2, out: false), + Case(inp: 1, out: true), + Case(inp: 193873, out: false), + Case(inp: 8, out: true), + Case(inp: 012, out: true), + Case(inp: null, out: false), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -120,16 +121,16 @@ void main() { group("#isNotExpired", () { final cases = [ - _Case(inp: [2020, 10], out: true), - _Case(inp: [10, 0], out: false), - _Case(inp: [0, 0], out: false), - _Case(inp: [1994, 1], out: false), - _Case(inp: [1, 1], out: false), - _Case(inp: [-203, -13], out: false), - _Case(inp: [22, 10], out: true), - _Case(inp: [2020, 05], out: true), - _Case(inp: [24, null], out: false), - _Case(inp: [null, null], out: false), + Case(inp: [2020, 10], out: true), + Case(inp: [10, 0], out: false), + Case(inp: [0, 0], out: false), + Case(inp: [1994, 1], out: false), + Case(inp: [1, 1], out: false), + Case(inp: [-203, -13], out: false), + Case(inp: [22, 10], out: true), + Case(inp: [2020, 05], out: true), + Case(inp: [24, null], out: false), + Case(inp: [null, null], out: false), ]; cases.forEach((c) { test("${c.inp} returns ${c.out}", () { @@ -141,13 +142,13 @@ void main() { group("#getCleanedNumber", () { final cases = [ - _Case(inp: "poiuytdfghjkkjhb", out: ""), - _Case(inp: "098765tgb098eyr", out: "098765098"), - _Case(inp: "6d8ge8gf7tfhd=-82qgjs9fh7w6ehf8", out: "6887829768"), - _Case(inp: "0", out: "0"), - _Case(inp: "девяносто", out: ""), - _Case(inp: "一些角色", out: ""), - _Case(inp: null, out: ""), + Case(inp: "poiuytdfghjkkjhb", out: ""), + Case(inp: "098765tgb098eyr", out: "098765098"), + Case(inp: "6d8ge8gf7tfhd=-82qgjs9fh7w6ehf8", out: "6887829768"), + Case(inp: "0", out: "0"), + Case(inp: "девяносто", out: ""), + Case(inp: "一些角色", out: ""), + Case(inp: null, out: ""), ]; cases.forEach((c) { @@ -160,40 +161,40 @@ void main() { group("#concatenateCardFields", () { final cases = [ - _Case( + Case( inp: PaymentCard( number: null, cvc: null, expiryMonth: null, expiryYear: null), out: throwsA(TypeMatcher())), - _Case(inp: null, out: throwsA(TypeMatcher())), - _Case( + Case(inp: null, out: throwsA(TypeMatcher())), + Case( inp: PaymentCard( number: "4111111111111111", cvc: "123", expiryMonth: 12, expiryYear: 12), out: "4111111111111111*123*12*12"), - _Case( + Case( inp: PaymentCard( number: "5500000000000004", cvc: null, expiryMonth: 12, expiryYear: 12), out: "5500000000000004*null*12*12"), - _Case( + Case( inp: PaymentCard( number: "340000000000009", cvc: "433", expiryMonth: 199, expiryYear: null), out: "340000000000009*433*199*0"), - _Case( + Case( inp: PaymentCard( number: "340000000000009", cvc: "433", expiryMonth: null, expiryYear: 30), out: "340000000000009*433*0*30"), - _Case( + Case( inp: PaymentCard( number: "340000000000009", cvc: "433", @@ -217,19 +218,19 @@ void main() { group("#getExpiryDate", () { final cases = [ - _Case(inp: "poiuytdfghjkkjhb", out: [-1, -1]), - _Case(inp: "0/12", out: [0, 12]), - _Case(inp: "13/0", out: [13, 0]), - _Case(inp: "девяносто/носто", out: [-1, -1]), - _Case(inp: "一些角色/12", out: [-1, 12]), - _Case(inp: null, out: [-1, -1]), - _Case(inp: "12/23", out: [12, 23]), - _Case(inp: "-12/-23", out: [-12, -23]), - _Case(inp: "13/", out: [13, -1]), - _Case(inp: "/", out: [-1, -1]), - _Case(inp: "", out: [-1, -1]), - _Case(inp: "12/23/14", out: [12, 14]), - _Case(inp: "1223", out: [1223, -1]), + Case(inp: "poiuytdfghjkkjhb", out: [-1, -1]), + Case(inp: "0/12", out: [0, 12]), + Case(inp: "13/0", out: [13, 0]), + Case(inp: "девяносто/носто", out: [-1, -1]), + Case(inp: "一些角色/12", out: [-1, 12]), + Case(inp: null, out: [-1, -1]), + Case(inp: "12/23", out: [12, 23]), + Case(inp: "-12/-23", out: [-12, -23]), + Case(inp: "13/", out: [13, -1]), + Case(inp: "/", out: [-1, -1]), + Case(inp: "", out: [-1, -1]), + Case(inp: "12/23/14", out: [12, 14]), + Case(inp: "1223", out: [1223, -1]), ]; cases.forEach((c) { @@ -241,10 +242,3 @@ void main() { }); }); } - -class _Case { - dynamic inp; - dynamic out; - - _Case({@required this.inp, @required this.out}); -} diff --git a/test/src/common/case.dart b/test/src/common/case.dart new file mode 100644 index 00000000..fec53294 --- /dev/null +++ b/test/src/common/case.dart @@ -0,0 +1,8 @@ +import 'package:meta/meta.dart'; + +class Case { + dynamic inp; + dynamic out; + + Case({@required this.inp, @required this.out}); +} diff --git a/test/src/common/string_utils_test.dart b/test/src/common/string_utils_test.dart new file mode 100644 index 00000000..4c70bbfe --- /dev/null +++ b/test/src/common/string_utils_test.dart @@ -0,0 +1,66 @@ +import 'package:flutter_paystack/src/common/string_utils.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'case.dart'; + +void main() { + group("$StringUtils", () { + group("#isEmpty", () { + final cases = [ + Case(inp: "876jje", out: false), + Case(inp: "@", out: false), + Case(inp: "12344323", out: false), + Case(inp: "null", out: true), + Case(inp: null, out: true), + Case(inp: "娱乐", out: false), + Case(inp: "развлекательная", out: false), + ]; + cases.forEach((c) { + test("${c.inp} returns ${c.out}", () { + final value = StringUtils.isEmpty(c.inp); + expect(c.out, value); + }); + }); + }); + + group("#isValidEmail", () { + final cases = [ + Case(inp: "email", out: false), + Case(inp: "@", out: false), + Case(inp: ".com", out: false), + Case(inp: "email@.com", out: false), + Case(inp: "email@host.com", out: true), + Case(inp: "ema-il@host-h.com", out: true), + Case(inp: "e_mail@host-j.gov", out: true), + Case(inp: "asdf@adsf.adsf", out: true), + Case(inp: "развлекательная@adsf.adsf", out: false), + Case(inp: "1234444", out: false), + Case(inp: "null", out: false), + Case(inp: null, out: false), + ]; + cases.forEach((c) { + test("${c.inp} returns ${c.out}", () { + final value = StringUtils.isValidEmail(c.inp); + expect(c.out, value); + }); + }); + }); + + group("#nullify", () { + final cases = [ + Case(inp: "you", out: "you"), + Case(inp: "развлекательная", out: "развлекательная"), + Case(inp: "娱乐", out: "娱乐"), + Case(inp: "", out: null), + Case(inp: '', out: null), + Case(inp: null, out: isNot(equals("q"))), + ]; + cases.forEach((c) { + test("${c.inp} returns ${c.out}", () { + final value = StringUtils.nullify(c.inp); + expect(value, c.out); + }); + }); + }); + }); +} diff --git a/test/src/common/utils_test.dart b/test/src/common/utils_test.dart new file mode 100644 index 00000000..b23d9cce --- /dev/null +++ b/test/src/common/utils_test.dart @@ -0,0 +1,174 @@ +import 'dart:io'; + +import 'package:flutter/services.dart'; +import 'package:flutter_paystack/flutter_paystack.dart'; +import 'package:flutter_paystack/src/common/my_strings.dart'; +import 'package:flutter_paystack/src/common/utils.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:matcher/matcher.dart'; + +void main() { + const MethodChannel channel = MethodChannel('flutter_paystack'); + + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + return ''; + }); + }); + + tearDown(() { + channel.setMockMethodCallHandler(null); + }); + + group("$Utils", () { + group("#validateSdkInitialized", () { + test( + "throws PaystackSdkNotInitializedException when PaystackPlugin is not initialized", + () { + expect(() => Utils.validateSdkInitialized(), + throwsA(TypeMatcher())); + }); + + test("returns normally when PaystackPlugin is initialized", () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + expect(() => Utils.validateSdkInitialized(), returnsNormally); + PaystackPlugin.dispose(); + }); + }); + + group("#getKeyErrorMsg", () { + test("returns a string with keyType", () { + final keyType = "public"; + expect(Utils.getKeyErrorMsg(keyType), contains(keyType)); + }); + }); + + group("#formatAmount", () { + test("throws Error when currency formatter is not set", () { + expect(() => Utils.formatAmount(100), throwsA(TypeMatcher())); + }); + + test("returns normally when currency formatter has been set", () { + Utils.setCurrencyFormatter(Strings.ngn, Strings.nigerianLocale); + expect(() => Utils.formatAmount(100), returnsNormally); + }); + }); + + group("#validateChargeAndKey", () { + test( + "throws PaystackSdkNotInitializedException when called with null charge and PaystackPlugin is not initialized", + () { + expect(() => Utils.validateChargeAndKey(null), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws PaystackSdkNotInitializedException when called with charge and PaystackPlugin is not initialized", + () { + expect(() { + var charge = Charge() + ..email = "email@e.co" + ..amount = 100; + return Utils.validateChargeAndKey(charge); + }, throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws AuthenticationException when called with null charge and PaystackPlugin is initialized with invalid key", + () async { + await PaystackPlugin.initialize(publicKey: "ytryuiuyuiuyfg"); + expect(() => Utils.validateChargeAndKey(null), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws AuthenticationException when called with charge and PaystackPlugin is initialized with invalid key", + () async { + await PaystackPlugin.initialize(publicKey: "ytryuiuyuiuyfg"); + var charge = Charge() + ..email = "email@e.co" + ..amount = 100; + expect(() => Utils.validateChargeAndKey(charge), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws PaystackException when called with null charge and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + expect(() => Utils.validateChargeAndKey(null), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws InvalidAmountException when called with null amount and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + expect(() => Utils.validateChargeAndKey(Charge()..email = "you@u.com"), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws InvalidAmountException when called with negative amount and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + expect(() { + var charge = Charge() + ..email = "you@u.com" + ..amount = -10; + return Utils.validateChargeAndKey(charge); + }, throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws InvalidAmountException when called with valid amount, null email and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + expect(() { + var charge = Charge()..amount = 10; + return Utils.validateChargeAndKey(charge); + }, throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "throws InvalidAmountException when called with valid amount, invalid email and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + var charge = Charge() + ..amount = 10 + ..email = "8yu"; + expect(() => Utils.validateChargeAndKey(charge), + throwsA(TypeMatcher())); + PaystackPlugin.dispose(); + }); + + test( + "returns normally when called with valid charge and PaystackPlugin is initialized with valid key", + () async { + await PaystackPlugin.initialize( + publicKey: Platform.environment["PAYSTACK_TEST_PUBLIC_KEY"]); + var charge = Charge() + ..amount = 10 + ..email = "8yu@h.go"; + expect(() => Utils.validateChargeAndKey(charge), returnsNormally); + PaystackPlugin.dispose(); + }); + }); + }); +}