mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-11 02:23:19 -04:00
Replace UK phone numbers in tests with US numbers
This commit is contained in:
@@ -31,7 +31,7 @@ pytz = "==2022.1"
|
||||
rtreelib = "==0.2.0"
|
||||
werkzeug = "==2.1.2"
|
||||
wtforms = "==3.0.1"
|
||||
notifications-utils = {editable = true, ref = "main", git = "https://github.com/GSA/notifications-utils.git"}
|
||||
notifications-utils = {editable = true, ref = "main", git = "https://github.com/GSA/notifications-utils"}
|
||||
|
||||
[dev-packages]
|
||||
isort = "==5.10.1"
|
||||
|
||||
Generated
+204
-203
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "407f000846ac854dc6648aa384fa90a5ab5577c2f0a90d7b7e4285347c47f091"
|
||||
"sha256": "301614ec2e4911b6992dbbab196ccc938da3205f1a14e4472afc2b0c65957c93"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
@@ -49,19 +49,19 @@
|
||||
},
|
||||
"boto3": {
|
||||
"hashes": [
|
||||
"sha256:53badfc5f145b8a3f9117512b41bc5a64db1cce1b549061d8edba68909e63fdf",
|
||||
"sha256:548081a0f8854bb2eea1e368ab29945478105f56989546f653c75528dcb07d88"
|
||||
"sha256:4f4c3018caf2ddaf355f202be8ff48c5ecf9d4208d6d6c581055428fcfa2309b",
|
||||
"sha256:a612ed29551900e6504e749df9b3c991453ee2bf2656d63777d76b4cbd644fed"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.26.28"
|
||||
"version": "==1.26.44"
|
||||
},
|
||||
"botocore": {
|
||||
"hashes": [
|
||||
"sha256:982732e7ed65cb6ed11ea3ce0e32dff2bcd465836c32376154f0802aa0a112c7",
|
||||
"sha256:f0b8bb976e368dea20a960b47169e31fc0828feb6f0b9f59f1e5be8d08919b10"
|
||||
"sha256:d4c10df0946ada82827b9f5323c43ba2ee5e81ae9c2acfbd2c59f65668c27863",
|
||||
"sha256:e48371ff2c375f6a5ac2e6cdbb2d32aa14b1c9c0c049f12af96ec5614c55a6f1"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.29.28"
|
||||
"version": "==1.29.44"
|
||||
},
|
||||
"cachetools": {
|
||||
"hashes": [
|
||||
@@ -174,35 +174,32 @@
|
||||
},
|
||||
"cryptography": {
|
||||
"hashes": [
|
||||
"sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd",
|
||||
"sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db",
|
||||
"sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290",
|
||||
"sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744",
|
||||
"sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb",
|
||||
"sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d",
|
||||
"sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70",
|
||||
"sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b",
|
||||
"sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876",
|
||||
"sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083",
|
||||
"sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6",
|
||||
"sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1",
|
||||
"sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00",
|
||||
"sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b",
|
||||
"sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b",
|
||||
"sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285",
|
||||
"sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9",
|
||||
"sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0",
|
||||
"sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d",
|
||||
"sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2",
|
||||
"sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8",
|
||||
"sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee",
|
||||
"sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b",
|
||||
"sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7",
|
||||
"sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353",
|
||||
"sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"
|
||||
"sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b",
|
||||
"sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f",
|
||||
"sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190",
|
||||
"sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f",
|
||||
"sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f",
|
||||
"sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb",
|
||||
"sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c",
|
||||
"sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773",
|
||||
"sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72",
|
||||
"sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8",
|
||||
"sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717",
|
||||
"sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9",
|
||||
"sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856",
|
||||
"sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96",
|
||||
"sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288",
|
||||
"sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39",
|
||||
"sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e",
|
||||
"sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce",
|
||||
"sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1",
|
||||
"sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de",
|
||||
"sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df",
|
||||
"sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf",
|
||||
"sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==38.0.4"
|
||||
"version": "==39.0.0"
|
||||
},
|
||||
"dnspython": {
|
||||
"hashes": [
|
||||
@@ -396,11 +393,11 @@
|
||||
},
|
||||
"importlib-metadata": {
|
||||
"hashes": [
|
||||
"sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b",
|
||||
"sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"
|
||||
"sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad",
|
||||
"sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"
|
||||
],
|
||||
"markers": "python_version < '3.10'",
|
||||
"version": "==5.1.0"
|
||||
"version": "==6.0.0"
|
||||
},
|
||||
"itsdangerous": {
|
||||
"hashes": [
|
||||
@@ -435,79 +432,86 @@
|
||||
},
|
||||
"lxml": {
|
||||
"hashes": [
|
||||
"sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318",
|
||||
"sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c",
|
||||
"sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b",
|
||||
"sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000",
|
||||
"sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73",
|
||||
"sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d",
|
||||
"sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb",
|
||||
"sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8",
|
||||
"sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2",
|
||||
"sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345",
|
||||
"sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94",
|
||||
"sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e",
|
||||
"sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b",
|
||||
"sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc",
|
||||
"sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a",
|
||||
"sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9",
|
||||
"sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc",
|
||||
"sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387",
|
||||
"sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb",
|
||||
"sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7",
|
||||
"sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4",
|
||||
"sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97",
|
||||
"sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67",
|
||||
"sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627",
|
||||
"sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7",
|
||||
"sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd",
|
||||
"sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3",
|
||||
"sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7",
|
||||
"sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130",
|
||||
"sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b",
|
||||
"sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036",
|
||||
"sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785",
|
||||
"sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca",
|
||||
"sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91",
|
||||
"sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc",
|
||||
"sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536",
|
||||
"sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391",
|
||||
"sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3",
|
||||
"sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d",
|
||||
"sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21",
|
||||
"sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3",
|
||||
"sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d",
|
||||
"sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29",
|
||||
"sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715",
|
||||
"sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed",
|
||||
"sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25",
|
||||
"sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c",
|
||||
"sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785",
|
||||
"sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837",
|
||||
"sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4",
|
||||
"sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b",
|
||||
"sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2",
|
||||
"sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067",
|
||||
"sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448",
|
||||
"sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d",
|
||||
"sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2",
|
||||
"sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc",
|
||||
"sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c",
|
||||
"sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5",
|
||||
"sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84",
|
||||
"sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8",
|
||||
"sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf",
|
||||
"sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7",
|
||||
"sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e",
|
||||
"sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb",
|
||||
"sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b",
|
||||
"sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3",
|
||||
"sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad",
|
||||
"sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8",
|
||||
"sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"
|
||||
"sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7",
|
||||
"sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726",
|
||||
"sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03",
|
||||
"sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140",
|
||||
"sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a",
|
||||
"sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05",
|
||||
"sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03",
|
||||
"sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419",
|
||||
"sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4",
|
||||
"sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e",
|
||||
"sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67",
|
||||
"sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50",
|
||||
"sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894",
|
||||
"sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf",
|
||||
"sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947",
|
||||
"sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1",
|
||||
"sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd",
|
||||
"sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3",
|
||||
"sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92",
|
||||
"sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3",
|
||||
"sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457",
|
||||
"sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74",
|
||||
"sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf",
|
||||
"sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1",
|
||||
"sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4",
|
||||
"sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975",
|
||||
"sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5",
|
||||
"sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe",
|
||||
"sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7",
|
||||
"sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1",
|
||||
"sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2",
|
||||
"sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409",
|
||||
"sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f",
|
||||
"sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f",
|
||||
"sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5",
|
||||
"sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24",
|
||||
"sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e",
|
||||
"sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4",
|
||||
"sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a",
|
||||
"sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c",
|
||||
"sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de",
|
||||
"sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f",
|
||||
"sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b",
|
||||
"sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5",
|
||||
"sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7",
|
||||
"sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a",
|
||||
"sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c",
|
||||
"sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9",
|
||||
"sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e",
|
||||
"sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab",
|
||||
"sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941",
|
||||
"sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5",
|
||||
"sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45",
|
||||
"sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7",
|
||||
"sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892",
|
||||
"sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746",
|
||||
"sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c",
|
||||
"sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53",
|
||||
"sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe",
|
||||
"sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184",
|
||||
"sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38",
|
||||
"sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df",
|
||||
"sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9",
|
||||
"sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b",
|
||||
"sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2",
|
||||
"sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0",
|
||||
"sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda",
|
||||
"sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b",
|
||||
"sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5",
|
||||
"sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380",
|
||||
"sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33",
|
||||
"sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8",
|
||||
"sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1",
|
||||
"sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889",
|
||||
"sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9",
|
||||
"sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f",
|
||||
"sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||
"version": "==4.9.1"
|
||||
"version": "==4.9.2"
|
||||
},
|
||||
"markupsafe": {
|
||||
"hashes": [
|
||||
@@ -571,42 +575,42 @@
|
||||
},
|
||||
"notifications-utils": {
|
||||
"editable": true,
|
||||
"git": "https://github.com/GSA/notifications-utils.git",
|
||||
"ref": "553f4affbef4d0a9e94e9bcf2ceb5c81d92bf032"
|
||||
"git": "https://github.com/GSA/notifications-utils",
|
||||
"ref": "d88d48026171991de4d8398e5f9f8c2063297885"
|
||||
},
|
||||
"numpy": {
|
||||
"hashes": [
|
||||
"sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d",
|
||||
"sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07",
|
||||
"sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df",
|
||||
"sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9",
|
||||
"sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d",
|
||||
"sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a",
|
||||
"sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719",
|
||||
"sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2",
|
||||
"sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280",
|
||||
"sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa",
|
||||
"sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387",
|
||||
"sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1",
|
||||
"sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43",
|
||||
"sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f",
|
||||
"sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398",
|
||||
"sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63",
|
||||
"sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de",
|
||||
"sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8",
|
||||
"sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481",
|
||||
"sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0",
|
||||
"sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d",
|
||||
"sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e",
|
||||
"sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96",
|
||||
"sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb",
|
||||
"sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6",
|
||||
"sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d",
|
||||
"sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a",
|
||||
"sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"
|
||||
"sha256:0044f7d944ee882400890f9ae955220d29b33d809a038923d88e4e01d652acd9",
|
||||
"sha256:0e3463e6ac25313462e04aea3fb8a0a30fb906d5d300f58b3bc2c23da6a15398",
|
||||
"sha256:179a7ef0889ab769cc03573b6217f54c8bd8e16cef80aad369e1e8185f994cd7",
|
||||
"sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2",
|
||||
"sha256:26089487086f2648944f17adaa1a97ca6aee57f513ba5f1c0b7ebdabbe2b9954",
|
||||
"sha256:28bc9750ae1f75264ee0f10561709b1462d450a4808cd97c013046073ae64ab6",
|
||||
"sha256:28e418681372520c992805bb723e29d69d6b7aa411065f48216d8329d02ba032",
|
||||
"sha256:442feb5e5bada8408e8fcd43f3360b78683ff12a4444670a7d9e9824c1817d36",
|
||||
"sha256:6ec0c021cd9fe732e5bab6401adea5a409214ca5592cd92a114f7067febcba0c",
|
||||
"sha256:7094891dcf79ccc6bc2a1f30428fa5edb1e6fb955411ffff3401fb4ea93780a8",
|
||||
"sha256:84e789a085aabef2f36c0515f45e459f02f570c4b4c4c108ac1179c34d475ed7",
|
||||
"sha256:87a118968fba001b248aac90e502c0b13606721b1343cdaddbc6e552e8dfb56f",
|
||||
"sha256:8e669fbdcdd1e945691079c2cae335f3e3a56554e06bbd45d7609a6cf568c700",
|
||||
"sha256:ad2925567f43643f51255220424c23d204024ed428afc5aad0f86f3ffc080086",
|
||||
"sha256:b0677a52f5d896e84414761531947c7a330d1adc07c3a4372262f25d84af7bf7",
|
||||
"sha256:b07b40f5fb4fa034120a5796288f24c1fe0e0580bbfff99897ba6267af42def2",
|
||||
"sha256:b09804ff570b907da323b3d762e74432fb07955701b17b08ff1b5ebaa8cfe6a9",
|
||||
"sha256:b162ac10ca38850510caf8ea33f89edcb7b0bb0dfa5592d59909419986b72407",
|
||||
"sha256:b31da69ed0c18be8b77bfce48d234e55d040793cebb25398e2a7d84199fbc7e2",
|
||||
"sha256:caf65a396c0d1f9809596be2e444e3bd4190d86d5c1ce21f5fc4be60a3bc5b36",
|
||||
"sha256:cfa1161c6ac8f92dea03d625c2d0c05e084668f4a06568b77a25a89111621566",
|
||||
"sha256:dae46bed2cb79a58d6496ff6d8da1e3b95ba09afeca2e277628171ca99b99db1",
|
||||
"sha256:ddc7ab52b322eb1e40521eb422c4e0a20716c271a306860979d450decbb51b8e",
|
||||
"sha256:de92efa737875329b052982e37bd4371d52cabf469f83e7b8be9bb7752d67e51",
|
||||
"sha256:e274f0f6c7efd0d577744f52032fdd24344f11c5ae668fe8d01aac0422611df1",
|
||||
"sha256:ed5fb71d79e771ec930566fae9c02626b939e37271ec285e9efaf1b5d4370e7d",
|
||||
"sha256:ef85cf1f693c88c1fd229ccd1055570cb41cdf4875873b7728b6301f12cd05bf",
|
||||
"sha256:f1b739841821968798947d3afcefd386fa56da0caf97722a5de53e07c4ccedc7"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==1.23.5"
|
||||
"version": "==1.24.1"
|
||||
},
|
||||
"openpyxl": {
|
||||
"hashes": [
|
||||
@@ -624,10 +628,10 @@
|
||||
},
|
||||
"phonenumbers": {
|
||||
"hashes": [
|
||||
"sha256:0179f688d48c0e7e161eb7b9d86d587940af1f5174f97c1fdfd893c599c0d94a",
|
||||
"sha256:884b26f775205261f4dc861371dce217c1661a4942fb3ec3624e290fb51869bf"
|
||||
"sha256:14f5a639eb47548595bb2baeff7bb63b32c95a4f79eed4dc7529afa2a65002d1",
|
||||
"sha256:7d0c45c154013970b78b86f4188e0e00a8e77d6bebef7c81efdc038db876eeba"
|
||||
],
|
||||
"version": "==8.13.2"
|
||||
"version": "==8.13.3"
|
||||
},
|
||||
"prometheus-client": {
|
||||
"hashes": [
|
||||
@@ -701,11 +705,11 @@
|
||||
},
|
||||
"pypdf2": {
|
||||
"hashes": [
|
||||
"sha256:41ff16ee122bad9790d57a4235281a838002d7f1cc8d631d91b6f65d709bd825",
|
||||
"sha256:e03ef18abcc75da741a0acc1a7749253496887be38cd9887bcce1cee393da45e"
|
||||
"sha256:a74408f69ba6271f71b9352ef4ed03dc53a31aa404d29b5d31f53bfecfee1440",
|
||||
"sha256:d16e4205cfee272fbdc0568b68d82be796540b1537508cef59388f839c191928"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2.12.1"
|
||||
"version": "==3.0.1"
|
||||
},
|
||||
"pyproj": {
|
||||
"hashes": [
|
||||
@@ -994,11 +998,11 @@
|
||||
"develop": {
|
||||
"attrs": {
|
||||
"hashes": [
|
||||
"sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6",
|
||||
"sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"
|
||||
"sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836",
|
||||
"sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==22.1.0"
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==22.2.0"
|
||||
},
|
||||
"bandit": {
|
||||
"hashes": [
|
||||
@@ -1018,19 +1022,19 @@
|
||||
},
|
||||
"boto3": {
|
||||
"hashes": [
|
||||
"sha256:53badfc5f145b8a3f9117512b41bc5a64db1cce1b549061d8edba68909e63fdf",
|
||||
"sha256:548081a0f8854bb2eea1e368ab29945478105f56989546f653c75528dcb07d88"
|
||||
"sha256:4f4c3018caf2ddaf355f202be8ff48c5ecf9d4208d6d6c581055428fcfa2309b",
|
||||
"sha256:a612ed29551900e6504e749df9b3c991453ee2bf2656d63777d76b4cbd644fed"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.26.28"
|
||||
"version": "==1.26.44"
|
||||
},
|
||||
"botocore": {
|
||||
"hashes": [
|
||||
"sha256:982732e7ed65cb6ed11ea3ce0e32dff2bcd465836c32376154f0802aa0a112c7",
|
||||
"sha256:f0b8bb976e368dea20a960b47169e31fc0828feb6f0b9f59f1e5be8d08919b10"
|
||||
"sha256:d4c10df0946ada82827b9f5323c43ba2ee5e81ae9c2acfbd2c59f65668c27863",
|
||||
"sha256:e48371ff2c375f6a5ac2e6cdbb2d32aa14b1c9c0c049f12af96ec5614c55a6f1"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.29.28"
|
||||
"version": "==1.29.44"
|
||||
},
|
||||
"cachecontrol": {
|
||||
"extras": [
|
||||
@@ -1137,35 +1141,32 @@
|
||||
},
|
||||
"cryptography": {
|
||||
"hashes": [
|
||||
"sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd",
|
||||
"sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db",
|
||||
"sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290",
|
||||
"sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744",
|
||||
"sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb",
|
||||
"sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d",
|
||||
"sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70",
|
||||
"sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b",
|
||||
"sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876",
|
||||
"sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083",
|
||||
"sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6",
|
||||
"sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1",
|
||||
"sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00",
|
||||
"sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b",
|
||||
"sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b",
|
||||
"sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285",
|
||||
"sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9",
|
||||
"sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0",
|
||||
"sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d",
|
||||
"sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2",
|
||||
"sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8",
|
||||
"sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee",
|
||||
"sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b",
|
||||
"sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7",
|
||||
"sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353",
|
||||
"sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"
|
||||
"sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b",
|
||||
"sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f",
|
||||
"sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190",
|
||||
"sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f",
|
||||
"sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f",
|
||||
"sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb",
|
||||
"sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c",
|
||||
"sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773",
|
||||
"sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72",
|
||||
"sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8",
|
||||
"sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717",
|
||||
"sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9",
|
||||
"sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856",
|
||||
"sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96",
|
||||
"sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288",
|
||||
"sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39",
|
||||
"sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e",
|
||||
"sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce",
|
||||
"sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1",
|
||||
"sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de",
|
||||
"sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df",
|
||||
"sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf",
|
||||
"sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==38.0.4"
|
||||
"version": "==39.0.0"
|
||||
},
|
||||
"cyclonedx-python-lib": {
|
||||
"hashes": [
|
||||
@@ -1225,11 +1226,11 @@
|
||||
},
|
||||
"gitpython": {
|
||||
"hashes": [
|
||||
"sha256:41eea0deec2deea139b459ac03656f0dd28fc4a3387240ec1d3c259a2c47850f",
|
||||
"sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"
|
||||
"sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8",
|
||||
"sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.1.29"
|
||||
"version": "==3.1.30"
|
||||
},
|
||||
"html5lib": {
|
||||
"hashes": [
|
||||
@@ -1424,11 +1425,11 @@
|
||||
},
|
||||
"packaging": {
|
||||
"hashes": [
|
||||
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
|
||||
"sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"
|
||||
"sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3",
|
||||
"sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==21.3"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==22.0"
|
||||
},
|
||||
"pbr": {
|
||||
"hashes": [
|
||||
@@ -1456,19 +1457,19 @@
|
||||
},
|
||||
"pip-audit": {
|
||||
"hashes": [
|
||||
"sha256:40876d6ad6adf5ac64fba1ecef034db9804c35c2c18f7c22cb7b11b382c10df9",
|
||||
"sha256:a45540ab0c5a9311315ca42c78fa8f72cf3598d5968a67d883d2d6194eda598c"
|
||||
"sha256:e65dfbccf29f290606911d3a49cf62497d3c140e4aac0a17775438d7630588da",
|
||||
"sha256:eab6aab5a649e93f17309bf8d57bb369a63fa9ef60e96b585bba22acdbb54b97"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.4.8"
|
||||
"version": "==2.4.12"
|
||||
},
|
||||
"pip-requirements-parser": {
|
||||
"hashes": [
|
||||
"sha256:5159b8a9485a5a0d0254a29c9bd8b8ce66db2eb9a1a0244c64dfce43f7f2ac90",
|
||||
"sha256:aa664781e69f82ecefda542d5210aa5b0f6533be95aea39a5453943db09359ed"
|
||||
"sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526",
|
||||
"sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==32.0.0"
|
||||
"markers": "python_full_version >= '3.6.0'",
|
||||
"version": "==32.0.1"
|
||||
},
|
||||
"pluggy": {
|
||||
"hashes": [
|
||||
@@ -1511,11 +1512,11 @@
|
||||
},
|
||||
"pygments": {
|
||||
"hashes": [
|
||||
"sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1",
|
||||
"sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"
|
||||
"sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297",
|
||||
"sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2.13.0"
|
||||
"version": "==2.14.0"
|
||||
},
|
||||
"pyparsing": {
|
||||
"hashes": [
|
||||
@@ -1659,11 +1660,11 @@
|
||||
},
|
||||
"rich": {
|
||||
"hashes": [
|
||||
"sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e",
|
||||
"sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"
|
||||
"sha256:25f83363f636995627a99f6e4abc52ed0970ebbd544960cc63cbb43aaac3d6f0",
|
||||
"sha256:41fe1d05f433b0f4724cda8345219213d2bfa472ef56b2f64f415b5b94d51b04"
|
||||
],
|
||||
"markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'",
|
||||
"version": "==12.6.0"
|
||||
"markers": "python_full_version >= '3.7.0'",
|
||||
"version": "==13.0.1"
|
||||
},
|
||||
"s3transfer": {
|
||||
"hashes": [
|
||||
|
||||
+1
-3
@@ -14,7 +14,6 @@ from notifications_utils.formatters import strip_all_whitespace
|
||||
from notifications_utils.insensitive_dict import InsensitiveDict
|
||||
from notifications_utils.recipients import (
|
||||
InvalidPhoneError,
|
||||
normalise_phone_number,
|
||||
validate_phone_number,
|
||||
)
|
||||
from werkzeug.utils import cached_property
|
||||
@@ -1538,10 +1537,9 @@ class ServiceContactDetailsForm(StripWhitespaceForm):
|
||||
self.email_address.validators = [DataRequired(), Length(min=5, max=255), ValidEmail()]
|
||||
|
||||
elif self.contact_details_type.data == 'phone_number':
|
||||
# we can't use the existing phone number validation functions here since we want to allow landlines
|
||||
def valid_phone_number(self, num):
|
||||
try:
|
||||
normalise_phone_number(num.data)
|
||||
validate_phone_number(num.data, international=True)
|
||||
return True
|
||||
except InvalidPhoneError:
|
||||
raise ValidationError('Must be a valid phone number')
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
{% call(item, row_number) list_table(
|
||||
[
|
||||
['phone number'],
|
||||
['07700 900123'],
|
||||
['555-867-5309'],
|
||||
],
|
||||
caption="Example",
|
||||
caption_visible=False,
|
||||
|
||||
+11
-11
@@ -59,7 +59,7 @@ def user_json(
|
||||
id_='1234',
|
||||
name='Test User',
|
||||
email_address='test@gsa.gov',
|
||||
mobile_number='+447700900986',
|
||||
mobile_number='+12028675109',
|
||||
password_changed_at=None,
|
||||
permissions=None,
|
||||
auth_type='sms_auth',
|
||||
@@ -359,19 +359,19 @@ def inbound_sms_json():
|
||||
'has_next': True,
|
||||
'data': [{
|
||||
'user_number': phone_number,
|
||||
'notify_number': '07900000002',
|
||||
'notify_number': '+12028675309',
|
||||
'content': f'message-{index + 1}',
|
||||
'created_at': (
|
||||
datetime.utcnow() - timedelta(minutes=60 * hours_ago, seconds=index)
|
||||
).isoformat(),
|
||||
'id': sample_uuid(),
|
||||
} for index, hours_ago, phone_number in (
|
||||
(0, 1, '447900900000'),
|
||||
(1, 1, '07900900000'),
|
||||
(2, 1, '07900900000'),
|
||||
(3, 3, '07900900002'),
|
||||
(4, 5, '33(0)1 12345678'), # France
|
||||
(5, 7, '1-202-555-0104'), # USA in one format
|
||||
(0, 1, '+12028675300'),
|
||||
(1, 1, '2028675300'),
|
||||
(2, 1, '2028675300'),
|
||||
(3, 3, '2028675302'),
|
||||
(4, 5, '+33(0)1 12345678'), # France
|
||||
(5, 7, '+1-202-555-0104'), # USA in one format
|
||||
(6, 9, '+12025550104'), # USA in another format
|
||||
(7, 9, '+68212345'), # Cook Islands
|
||||
)]
|
||||
@@ -386,7 +386,7 @@ def create_test_api_user(state, permissions=None):
|
||||
'name': 'Test User',
|
||||
'password': 'somepassword',
|
||||
'email_address': TEST_USER_EMAIL,
|
||||
'mobile_number': '+441234123412',
|
||||
'mobile_number': '+12021234123',
|
||||
'state': state,
|
||||
'permissions': permissions or {}
|
||||
}
|
||||
@@ -473,7 +473,7 @@ def notification_json(
|
||||
if template_type == 'email':
|
||||
to = 'example@gsa.gov'
|
||||
else:
|
||||
to = '07123456789'
|
||||
to = '2021234567'
|
||||
if sent_at is None:
|
||||
sent_at = str(datetime.utcnow().time())
|
||||
if created_at is None:
|
||||
@@ -548,7 +548,7 @@ def single_notification_json(
|
||||
|
||||
data = {
|
||||
'sent_at': sent_at,
|
||||
'to': '07123456789',
|
||||
'to': '2021234567',
|
||||
'billable_units': 1,
|
||||
'status': status,
|
||||
'created_at': created_at,
|
||||
|
||||
@@ -28,9 +28,9 @@ def test_form_class_not_mutated(notify_admin):
|
||||
(False, 'email address', 'email', 'test@example.gsa.gov', None),
|
||||
|
||||
(False, 'phone number', 'sms', '', 'Cannot be empty'),
|
||||
(False, 'phone number', 'sms', '+1-2345-678890', 'Not a UK mobile number'),
|
||||
(False, 'phone number', 'sms', '07900900123', None),
|
||||
(False, 'phone number', 'sms', '+44(0)7900 900-123', None),
|
||||
(False, 'phone number', 'sms', '+(44) 7700-900 855', 'Not a US number'),
|
||||
(False, 'phone number', 'sms', '2028675309', None),
|
||||
(False, 'phone number', 'sms', '+1 (202) 867-5309', None),
|
||||
|
||||
(True, 'phone number', 'sms', '+123', 'Not enough digits'),
|
||||
(True, 'phone number', 'sms', '+44(0)7900 900-123', None),
|
||||
@@ -39,7 +39,7 @@ def test_form_class_not_mutated(notify_admin):
|
||||
(False, 'anything else', 'sms', '', 'Cannot be empty'),
|
||||
(False, 'anything else', 'email', '', 'Cannot be empty'),
|
||||
|
||||
(True, 'phone number', 'sms', 'invalid', 'Must not contain letters or symbols'),
|
||||
(True, 'phone number', 'sms', 'invalid', 'The string supplied did not seem to be a phone number.'),
|
||||
(True, 'phone number', 'email', 'invalid', None),
|
||||
(True, 'email address', 'sms', 'invalid', None),
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ def test_should_raise_validation_error_for_password(
|
||||
form = RegisterUserForm()
|
||||
form.name.data = 'test'
|
||||
form.email_address.data = 'teset@gsa.gov'
|
||||
form.mobile_number.data = '441231231231'
|
||||
form.mobile_number.data = '2021231231'
|
||||
form.password.data = password
|
||||
|
||||
form.validate()
|
||||
@@ -25,7 +25,7 @@ def test_valid_email_not_in_valid_domains(
|
||||
client_request,
|
||||
mock_get_organisations,
|
||||
):
|
||||
form = RegisterUserForm(email_address="test@test.com", mobile_number='441231231231')
|
||||
form = RegisterUserForm(email_address="test@test.com", mobile_number='2021231231')
|
||||
assert not form.validate()
|
||||
assert "Enter a public sector email address" in form.errors['email_address'][0]
|
||||
|
||||
@@ -36,7 +36,7 @@ def test_valid_email_in_valid_domains(
|
||||
form = RegisterUserForm(
|
||||
name="test",
|
||||
email_address="test@gsa.gov",
|
||||
mobile_number='4407888999111',
|
||||
mobile_number='2028675309',
|
||||
password='an uncommon password')
|
||||
form.validate()
|
||||
assert form.errors == {}
|
||||
@@ -49,13 +49,13 @@ def test_invalid_email_address_error_message(
|
||||
form = RegisterUserForm(
|
||||
name="test",
|
||||
email_address="test.com",
|
||||
mobile_number='4407888999111',
|
||||
mobile_number='2028675309',
|
||||
password='1234567890')
|
||||
assert not form.validate()
|
||||
|
||||
form = RegisterUserForm(
|
||||
name="test",
|
||||
email_address="test.com",
|
||||
mobile_number='4407888999111',
|
||||
mobile_number='+12028675309',
|
||||
password='1234567890')
|
||||
assert not form.validate()
|
||||
|
||||
@@ -17,8 +17,8 @@ def test_form_fails_validation_with_no_radio_buttons_selected(notify_admin):
|
||||
('phone_number', 'url', 'http://www.example.com'),
|
||||
('url', 'email_address', 'user@example.com'),
|
||||
('phone_number', 'email_address', 'user@example.com'),
|
||||
('url', 'phone_number', '0207 123 4567'),
|
||||
('email_address', 'phone_number', '0207 123 4567'),
|
||||
('url', 'phone_number', '202 867 5309'),
|
||||
('email_address', 'phone_number', '202 867 5309'),
|
||||
])
|
||||
def test_form_fails_validation_when_radio_button_selected_and_text_box_filled_in_do_not_match(
|
||||
notify_admin,
|
||||
@@ -39,7 +39,7 @@ def test_form_fails_validation_when_radio_button_selected_and_text_box_filled_in
|
||||
@pytest.mark.parametrize('selected_field, url, email_address, phone_number', [
|
||||
('url', 'http://www.example.com', 'invalid-email.com', 'phone'),
|
||||
('email_address', 'www.invalid-url.com', 'me@example.com', 'phone'),
|
||||
('phone_number', 'www.invalid-url.com', 'invalid-email.com', '0207 123 4567'),
|
||||
('phone_number', 'www.invalid-url.com', 'invalid-email.com', '202 867 5309'),
|
||||
])
|
||||
def test_form_only_validates_the_field_which_matches_the_selected_radio_button(
|
||||
notify_admin,
|
||||
|
||||
@@ -251,10 +251,10 @@ def test_registration_from_org_invite_404s_if_user_not_in_session(
|
||||
'name': 'Bad Mobile',
|
||||
'mobile_number': 'not good',
|
||||
'password': 'validPassword!'
|
||||
}, 'Must not contain letters or symbols'],
|
||||
}, 'The string supplied did not seem to be a phone number'],
|
||||
[{
|
||||
'name': 'Bad Password',
|
||||
'mobile_number': '+44123412345',
|
||||
'mobile_number': '+12021234123',
|
||||
'password': 'password'
|
||||
}, 'Choose a password that’s harder to guess'],
|
||||
])
|
||||
@@ -296,7 +296,7 @@ def test_registration_from_org_invite_has_different_email_or_organisation(
|
||||
|
||||
data = {
|
||||
'name': 'Test User',
|
||||
'mobile_number': '+4407700900460',
|
||||
'mobile_number': '+12024900460',
|
||||
'password': 'validPassword!',
|
||||
'email_address': sample_org_invite['email_address'],
|
||||
'organisation': sample_org_invite['organisation']
|
||||
@@ -329,7 +329,7 @@ def test_org_user_registers_with_email_already_in_use(
|
||||
'main.register_from_org_invite',
|
||||
_data={
|
||||
'name': 'Test User',
|
||||
'mobile_number': '+4407700900460',
|
||||
'mobile_number': '+12024900460',
|
||||
'password': 'validPassword!',
|
||||
'email_address': sample_org_invite['email_address'],
|
||||
'organisation': sample_org_invite['organisation'],
|
||||
@@ -365,7 +365,7 @@ def test_org_user_registration(
|
||||
_data={
|
||||
'name': 'Test User',
|
||||
'email_address': sample_org_invite['email_address'],
|
||||
'mobile_number': '+4407700900460',
|
||||
'mobile_number': '+12024900460',
|
||||
'password': 'validPassword!',
|
||||
'organisation': sample_org_invite['organisation'],
|
||||
},
|
||||
@@ -376,14 +376,14 @@ def test_org_user_registration(
|
||||
mock_register_user.assert_called_once_with(
|
||||
'Test User',
|
||||
sample_org_invite['email_address'],
|
||||
'+4407700900460',
|
||||
'+12024900460',
|
||||
'validPassword!',
|
||||
'sms_auth'
|
||||
)
|
||||
mock_send_verify_code.assert_called_once_with(
|
||||
'6ce466d0-fd6a-11e5-82f5-e0accb9d11a6',
|
||||
'sms',
|
||||
'+4407700900460',
|
||||
'+12024900460',
|
||||
)
|
||||
mock_get_invited_org_user_by_id.assert_called_once_with(sample_org_invite['id'])
|
||||
|
||||
|
||||
@@ -3470,7 +3470,7 @@ def test_cant_resume_active_service(
|
||||
@pytest.mark.parametrize('contact_details_type, contact_details_value', [
|
||||
('url', 'http://example.com/'),
|
||||
('email_address', 'me@example.com'),
|
||||
('phone_number', '0207 123 4567'),
|
||||
('phone_number', '202 867 5309'),
|
||||
])
|
||||
def test_send_files_by_email_contact_details_prefills_the_form_with_the_existing_contact_details(
|
||||
client_request,
|
||||
@@ -3490,7 +3490,7 @@ def test_send_files_by_email_contact_details_prefills_the_form_with_the_existing
|
||||
@pytest.mark.parametrize('contact_details_type, old_value, new_value', [
|
||||
('url', 'http://example.com/', 'http://new-link.com/'),
|
||||
('email_address', 'old@example.com', 'new@example.com'),
|
||||
('phone_number', '0207 12345', '0207 56789'),
|
||||
('phone_number', '2021234567', '2028901234'),
|
||||
])
|
||||
def test_send_files_by_email_contact_details_updates_contact_details_and_redirects_to_settings_page(
|
||||
client_request,
|
||||
@@ -3534,7 +3534,7 @@ def test_send_files_by_email_contact_details_uses_the_selected_field_when_multip
|
||||
'contact_details_type': 'url',
|
||||
'url': 'http://www.new-url.com',
|
||||
'email_address': 'me@example.com',
|
||||
'phone_number': '0207 123 4567'
|
||||
'phone_number': '202 867 5309'
|
||||
},
|
||||
_follow_redirects=True
|
||||
)
|
||||
@@ -3623,7 +3623,7 @@ def test_send_files_by_email_contact_details_does_not_update_invalid_contact_det
|
||||
'main.service_set_inbound_sms',
|
||||
['sms', 'inbound_sms'],
|
||||
(
|
||||
'Your service can receive text messages sent to 0781239871.'
|
||||
'Your service can receive text messages sent to 2028675301.'
|
||||
)
|
||||
),
|
||||
(
|
||||
@@ -3694,14 +3694,14 @@ def test_set_inbound_sms_when_inbound_number_is_not_set(
|
||||
|
||||
@pytest.mark.parametrize('user, expected_paragraphs', [
|
||||
(create_active_user_with_permissions(), [
|
||||
'Your service can receive text messages sent to 07700900123.',
|
||||
'Your service can receive text messages sent to 2028675309.',
|
||||
'You can still send text messages from a sender name if you '
|
||||
'need to, but users will not be able to reply to those messages.',
|
||||
'Contact us if you want to switch this feature off.',
|
||||
'You can set up callbacks for received text messages on the API integration page.',
|
||||
]),
|
||||
(create_active_user_no_api_key_permission(), [
|
||||
'Your service can receive text messages sent to 07700900123.',
|
||||
'Your service can receive text messages sent to 2028675309.',
|
||||
'You can still send text messages from a sender name if you '
|
||||
'need to, but users will not be able to reply to those messages.',
|
||||
'Contact us if you want to switch this feature off.',
|
||||
@@ -3716,7 +3716,7 @@ def test_set_inbound_sms_when_inbound_number_is_set(
|
||||
):
|
||||
service_one['permissions'] = ['inbound_sms']
|
||||
mocker.patch('app.inbound_number_client.get_inbound_sms_number_for_service', return_value={
|
||||
'data': {'number': '07700900123'}
|
||||
'data': {'number': '2028675309'}
|
||||
})
|
||||
client_request.login(user)
|
||||
page = client_request.get(
|
||||
|
||||
@@ -465,7 +465,7 @@ def test_new_user_accept_invite_completes_new_registration_redirects_to_verify(
|
||||
'email_address': sample_invite['email_address'],
|
||||
'from_user': sample_invite['from_user'],
|
||||
'password': 'longpassword',
|
||||
'mobile_number': '+447890123456',
|
||||
'mobile_number': '+12027890123',
|
||||
'name': 'Invited User',
|
||||
'auth_type': 'email_auth'
|
||||
}
|
||||
@@ -584,7 +584,7 @@ def test_new_invited_user_verifies_and_added_to_service(
|
||||
'email_address': sample_invite['email_address'],
|
||||
'from_user': sample_invite['from_user'],
|
||||
'password': 'longpassword',
|
||||
'mobile_number': '+447890123456',
|
||||
'mobile_number': '+12027890123',
|
||||
'name': 'Invited User',
|
||||
'auth_type': 'sms_auth'
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ from tests.conftest import (
|
||||
@pytest.mark.parametrize(
|
||||
"to_argument, expected_to_argument", [
|
||||
('', ''),
|
||||
('+447900900123', '+447900900123'),
|
||||
('+12029000123', '+12029000123'),
|
||||
('test@example.com', 'test@example.com'),
|
||||
]
|
||||
)
|
||||
@@ -134,7 +134,7 @@ def test_can_show_notifications(
|
||||
) == (
|
||||
# Comes from
|
||||
# https://github.com/alphagov/notifications-admin/blob/8faffad508f9a087b0006989c197741c693cc2e2/tests/__init__.py#L436
|
||||
'07123456789'
|
||||
'2021234567'
|
||||
)
|
||||
assert normalize_spaces(
|
||||
# We’re doing str() here not .text to make sure there’s no extra
|
||||
@@ -587,7 +587,7 @@ def test_html_contains_links_for_failed_notifications(
|
||||
|
||||
@pytest.mark.parametrize('notification_type, expected_row_contents', (
|
||||
('sms', (
|
||||
'07123456789 hello & welcome hidden'
|
||||
'2021234567 hello & welcome hidden'
|
||||
)),
|
||||
('email', (
|
||||
'example@gsa.gov hidden, hello & welcome'
|
||||
|
||||
@@ -27,7 +27,7 @@ def test_should_show_api_page(
|
||||
rows = page.find_all('details')
|
||||
assert len(rows) == 5
|
||||
for row in rows:
|
||||
assert row.select('h3 .govuk-details__summary-text')[0].string.strip() == '07123456789'
|
||||
assert row.select('h3 .govuk-details__summary-text')[0].string.strip() == '2021234567'
|
||||
|
||||
|
||||
def test_should_show_api_page_with_lots_of_notifications(
|
||||
@@ -353,7 +353,7 @@ def test_should_show_guestlist_page(
|
||||
)
|
||||
textboxes = page.find_all('input', {'class': 'govuk-input'})
|
||||
for index, value in enumerate(
|
||||
['test@example.com'] + [None] * 4 + ['07900900000'] + [None] * 4
|
||||
['test@example.com'] + [None] * 4 + ['2028675300'] + [None] * 4
|
||||
):
|
||||
assert textboxes[index].get('value') == value
|
||||
|
||||
@@ -365,8 +365,8 @@ def test_should_update_guestlist(
|
||||
data = OrderedDict([
|
||||
('email_addresses-1', 'test@example.com'),
|
||||
('email_addresses-3', 'test@example.com'),
|
||||
('phone_numbers-0', '07900900000'),
|
||||
('phone_numbers-2', '+1800-555-555'),
|
||||
('phone_numbers-0', '2028675300'),
|
||||
('phone_numbers-2', '+1800-555-5555'),
|
||||
])
|
||||
|
||||
client_request.post(
|
||||
@@ -377,7 +377,7 @@ def test_should_update_guestlist(
|
||||
|
||||
mock_update_guest_list.assert_called_once_with(SERVICE_ONE_ID, {
|
||||
'email_addresses': ['test@example.com', 'test@example.com'],
|
||||
'phone_numbers': ['07900900000', '+1800-555-555']})
|
||||
'phone_numbers': ['2028675300', '+1800-555-5555']})
|
||||
|
||||
|
||||
def test_should_validate_guestlist_items(
|
||||
|
||||
@@ -81,8 +81,8 @@ def test_should_render_correct_resend_template_for_pending_user(
|
||||
f'/services/{SERVICE_ONE_ID}/templates',
|
||||
])
|
||||
@pytest.mark.parametrize('phone_number_to_register_with', [
|
||||
'+447700900460',
|
||||
'+1800-555-555',
|
||||
'+12027009004',
|
||||
'+1800-555-5555',
|
||||
])
|
||||
def test_should_resend_verify_code_and_update_mobile_for_pending_user(
|
||||
client_request,
|
||||
|
||||
@@ -25,15 +25,15 @@ def test_get_user_phone_number_when_only_inbound_exists(mocker):
|
||||
mock_get_inbound_sms = mocker.patch(
|
||||
'app.main.views.conversation.service_api_client.get_inbound_sms_by_id',
|
||||
return_value={
|
||||
'user_number': '4407900900123',
|
||||
'notify_number': '07900000002'
|
||||
'user_number': '2028675305',
|
||||
'notify_number': '2028675309'
|
||||
}
|
||||
)
|
||||
mock_get_notification = mocker.patch(
|
||||
'app.main.views.conversation.notification_api_client.get_notification',
|
||||
side_effect=HTTPError(response=Mock(status_code=404)),
|
||||
)
|
||||
assert get_user_number('service', 'notification') == '07900 900123'
|
||||
assert get_user_number('service', 'notification') == '(202) 867-5305'
|
||||
mock_get_inbound_sms.assert_called_once_with('service', 'notification')
|
||||
assert mock_get_notification.called is False
|
||||
|
||||
@@ -46,10 +46,10 @@ def test_get_user_phone_number_when_only_outbound_exists(mocker):
|
||||
mock_get_notification = mocker.patch(
|
||||
'app.main.views.conversation.notification_api_client.get_notification',
|
||||
return_value={
|
||||
'to': '15550000000'
|
||||
'to': '2028675309'
|
||||
}
|
||||
)
|
||||
assert get_user_number('service', 'notification') == '+1 555-000-0000'
|
||||
assert get_user_number('service', 'notification') == '(202) 867-5309'
|
||||
mock_get_inbound_sms.assert_called_once_with('service', 'notification')
|
||||
mock_get_notification.assert_called_once_with('service', 'notification')
|
||||
|
||||
@@ -102,7 +102,7 @@ def test_view_conversation(
|
||||
'Received text message – service one – U.S. Notify'
|
||||
)
|
||||
assert normalize_spaces(page.select_one('h1').text) == (
|
||||
'07123 456789'
|
||||
'2021234567'
|
||||
)
|
||||
|
||||
messages = page.select('.sms-message-wrapper')
|
||||
@@ -170,8 +170,8 @@ def test_view_conversation(
|
||||
normalize_spaces(statuses[index].text),
|
||||
) == expected
|
||||
|
||||
mock_get_inbound_sms.assert_called_once_with(SERVICE_ONE_ID, user_number='07123 456789')
|
||||
mock.assert_called_once_with(SERVICE_ONE_ID, to='07123 456789', template_type='sms')
|
||||
mock_get_inbound_sms.assert_called_once_with(SERVICE_ONE_ID, user_number='2021234567')
|
||||
mock.assert_called_once_with(SERVICE_ONE_ID, to='2021234567', template_type='sms')
|
||||
|
||||
|
||||
def test_view_conversation_updates(
|
||||
@@ -199,7 +199,7 @@ def test_view_conversation_updates(
|
||||
|
||||
assert json.loads(response.get_data(as_text=True)) == {'messages': 'foo'}
|
||||
|
||||
mock_get_partials.assert_called_once_with(SERVICE_ONE_ID, '07123 456789')
|
||||
mock_get_partials.assert_called_once_with(SERVICE_ONE_ID, '2021234567')
|
||||
|
||||
|
||||
@freeze_time("2012-01-01 00:00:00")
|
||||
@@ -217,8 +217,8 @@ def test_view_conversation_with_empty_inbound(
|
||||
return_value={
|
||||
'has_next': False,
|
||||
'data': [{
|
||||
'user_number': '07900000001',
|
||||
'notify_number': '07900000002',
|
||||
'user_number': '2028675301',
|
||||
'notify_number': '2028675309',
|
||||
'content': '',
|
||||
'created_at': datetime.utcnow().isoformat(),
|
||||
'id': fake_uuid
|
||||
@@ -376,7 +376,7 @@ def test_conversation_reply_redirects_with_phone_number_from_notification(
|
||||
|
||||
for element, expected_text in [
|
||||
('h1', 'Preview of ‘Two week reminder’'),
|
||||
('.sms-message-recipient', 'To: 07123 456789'),
|
||||
('.sms-message-recipient', 'To: 2021234567'),
|
||||
('.sms-message-wrapper', 'service one: Template <em>content</em> with & entity'),
|
||||
]:
|
||||
assert normalize_spaces(page.select_one(element).text) == expected_text
|
||||
@@ -387,7 +387,7 @@ def test_get_user_phone_number_when_not_a_standard_phone_number(mocker):
|
||||
'app.main.views.conversation.service_api_client.get_inbound_sms_by_id',
|
||||
return_value={
|
||||
'user_number': 'ALPHANUM3R1C',
|
||||
'notify_number': '07900000002'
|
||||
'notify_number': '2028675309'
|
||||
}
|
||||
)
|
||||
mocker.patch(
|
||||
|
||||
@@ -223,13 +223,13 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('index, expected_row', enumerate([
|
||||
'07900 900000 message-1 1 hour ago',
|
||||
'07900 900000 message-2 1 hour ago',
|
||||
'07900 900000 message-3 1 hour ago',
|
||||
'07900 900002 message-4 3 hours ago',
|
||||
'(202) 867-5300 message-1 1 hour ago',
|
||||
'(202) 867-5300 message-2 1 hour ago',
|
||||
'(202) 867-5300 message-3 1 hour ago',
|
||||
'(202) 867-5302 message-4 3 hours ago',
|
||||
'+33 1 12 34 56 78 message-5 5 hours ago',
|
||||
'+1 202-555-0104 message-6 7 hours ago',
|
||||
'+1 202-555-0104 message-7 9 hours ago',
|
||||
'(202) 555-0104 message-6 7 hours ago',
|
||||
'(202) 555-0104 message-7 9 hours ago',
|
||||
'+682 12345 message-8 9 hours ago',
|
||||
]))
|
||||
def test_inbox_showing_inbound_messages(
|
||||
@@ -301,7 +301,7 @@ def test_empty_inbox(
|
||||
)
|
||||
|
||||
assert normalize_spaces(page.select('tbody tr')) == (
|
||||
'When users text your service’s phone number (0781239871) you’ll see the messages here'
|
||||
'When users text your service’s phone number (2028675301) you’ll see the messages here'
|
||||
)
|
||||
assert not page.select('a[download]')
|
||||
assert not page.select('li.next-page')
|
||||
@@ -389,13 +389,13 @@ def test_download_inbox(
|
||||
)
|
||||
assert response.get_data(as_text=True) == (
|
||||
'Phone number,Message,Received\r\n'
|
||||
'07900 900000,message-1,2016-07-01 13:00\r\n'
|
||||
'07900 900000,message-2,2016-07-01 12:59\r\n'
|
||||
'07900 900000,message-3,2016-07-01 12:59\r\n'
|
||||
'07900 900002,message-4,2016-07-01 10:59\r\n'
|
||||
'(202) 867-5300,message-1,2016-07-01 13:00\r\n'
|
||||
'(202) 867-5300,message-2,2016-07-01 12:59\r\n'
|
||||
'(202) 867-5300,message-3,2016-07-01 12:59\r\n'
|
||||
'(202) 867-5302,message-4,2016-07-01 10:59\r\n'
|
||||
'+33 1 12 34 56 78,message-5,2016-07-01 08:59\r\n'
|
||||
'+1 202-555-0104,message-6,2016-07-01 06:59\r\n'
|
||||
'+1 202-555-0104,message-7,2016-07-01 04:59\r\n'
|
||||
'(202) 555-0104,message-6,2016-07-01 06:59\r\n'
|
||||
'(202) 555-0104,message-7,2016-07-01 04:59\r\n'
|
||||
'+682 12345,message-8,2016-07-01 04:59\r\n'
|
||||
)
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ def test_user_information_page_shows_information_about_user(
|
||||
normalize_spaces(p.text) for p in page.select('main p')
|
||||
] == [
|
||||
'test@gsa.gov',
|
||||
'+447700900986',
|
||||
'+12028675109',
|
||||
'Text message code',
|
||||
'Last logged in just now',
|
||||
]
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
sample_inbound_sms = {'data': [{"id": "activated",
|
||||
"number": "0784121212",
|
||||
"number": "2028675309",
|
||||
"provider": "provider_one",
|
||||
"service": {"id": "123234", "name": "Service One"},
|
||||
"active": True,
|
||||
"created_at": "2017-08-15T13:30:30.12312",
|
||||
"updated_at": "2017-08-15T13:30:30.12312"},
|
||||
{"id": "available",
|
||||
"number": "0784131313",
|
||||
"number": "2028675308",
|
||||
"provider": "provider_one",
|
||||
"service": None,
|
||||
"active": True,
|
||||
"created_at": "2017-08-15T13:30:30.12312",
|
||||
"updated_at": None},
|
||||
{"id": "deactivated",
|
||||
"number": "0784131313",
|
||||
"number": "2028675308",
|
||||
"provider": "provider_one",
|
||||
"service": None,
|
||||
"active": True,
|
||||
|
||||
@@ -83,7 +83,7 @@ def test_should_show_page_for_one_job(
|
||||
|
||||
assert page.h1.text.strip() == 'thisisatest.csv'
|
||||
assert ' '.join(page.find('tbody').find('tr').text.split()) == (
|
||||
'07123456789 template content Delivered 1 January at 11:10am'
|
||||
'2021234567 template content Delivered 1 January at 11:10am'
|
||||
)
|
||||
assert page.find('div', {'data-key': 'notifications'})['data-resource'] == url_for(
|
||||
'main.view_job_updates',
|
||||
@@ -102,7 +102,7 @@ def test_should_show_page_for_one_job(
|
||||
assert page.find('span', {'id': 'time-left'}).text == 'Data available for 7 days'
|
||||
|
||||
assert normalize_spaces(page.select_one('tbody tr').text) == normalize_spaces(
|
||||
'07123456789 '
|
||||
'2021234567 '
|
||||
'template content '
|
||||
'Delivered 1 January at 11:10am'
|
||||
)
|
||||
@@ -396,7 +396,7 @@ def test_should_show_updates_for_one_job_as_json(
|
||||
assert 'delivered' in content['counts']
|
||||
assert 'failed' in content['counts']
|
||||
assert 'Recipient' in content['notifications']
|
||||
assert '07123456789' in content['notifications']
|
||||
assert '2021234567' in content['notifications']
|
||||
assert 'Status' in content['notifications']
|
||||
assert 'Delivered' in content['notifications']
|
||||
assert '12:01am' in content['notifications']
|
||||
@@ -433,7 +433,7 @@ def test_should_show_updates_for_scheduled_job_as_json(
|
||||
assert 'delivered' in content['counts']
|
||||
assert 'failed' in content['counts']
|
||||
assert 'Recipient' in content['notifications']
|
||||
assert '07123456789' in content['notifications']
|
||||
assert '2021234567' in content['notifications']
|
||||
assert 'Status' in content['notifications']
|
||||
assert 'Delivered' in content['notifications']
|
||||
assert '12:01am' in content['notifications']
|
||||
|
||||
@@ -385,7 +385,7 @@ def test_manage_users_page_shows_member_auth_type_if_service_has_email_auth_acti
|
||||
),
|
||||
(
|
||||
False,
|
||||
'07700 900762',
|
||||
'202-867-5303',
|
||||
"""
|
||||
Text message code
|
||||
""",
|
||||
@@ -1711,7 +1711,7 @@ def test_edit_user_permissions_page_displays_redacted_mobile_number_and_change_l
|
||||
|
||||
assert active_user_with_permissions['name'] in page.find('h1').text
|
||||
mobile_number_paragraph = page.select('p[id=user_mobile_number]')[0]
|
||||
assert '0770 • • • • 762' in mobile_number_paragraph.text
|
||||
assert '202-8 • • • • 303' in mobile_number_paragraph.text
|
||||
change_link = mobile_number_paragraph.findChild()
|
||||
assert change_link.attrs['href'] == '/services/{}/users/{}/edit-mobile-number'.format(
|
||||
service_one['id'], active_user_with_permissions['id']
|
||||
@@ -1758,7 +1758,7 @@ def test_edit_user_mobile_number_page(
|
||||
assert page.select('p[id=user_name]')[0].text == (
|
||||
"This will change the mobile number for {}."
|
||||
).format(active_user_with_permissions['name'])
|
||||
assert page.select('input[name=mobile_number]')[0].attrs["value"] == "0770••••762"
|
||||
assert page.select('input[name=mobile_number]')[0].attrs["value"] == "202-8••••303"
|
||||
assert normalize_spaces(page.select('main button[type=submit]')[0].text) == "Save"
|
||||
|
||||
|
||||
@@ -1771,7 +1771,7 @@ def test_edit_user_mobile_number_redirects_to_confirmation(
|
||||
'main.edit_user_mobile_number',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
user_id=active_user_with_permissions['id'],
|
||||
_data={'mobile_number': '07554080636'},
|
||||
_data={'mobile_number': '2028675309'},
|
||||
_expected_status=302,
|
||||
_expected_redirect=url_for(
|
||||
'main.confirm_edit_user_mobile_number',
|
||||
@@ -1793,7 +1793,7 @@ def test_edit_user_mobile_number_redirects_to_manage_users_if_number_not_changed
|
||||
'main.edit_user_mobile_number',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
user_id=active_user_with_permissions['id'],
|
||||
_data={'mobile_number': '0770••••762'},
|
||||
_data={'mobile_number': '202-8••••303'},
|
||||
_expected_status=302,
|
||||
_expected_redirect=url_for(
|
||||
'main.manage_users',
|
||||
@@ -1810,7 +1810,7 @@ def test_confirm_edit_user_mobile_number_page(
|
||||
mocker,
|
||||
mock_get_user,
|
||||
):
|
||||
new_number = '07554080636'
|
||||
new_number = '2028675309'
|
||||
with client_request.session_transaction() as session:
|
||||
session['team_member_mobile_change'] = new_number
|
||||
page = client_request.get(
|
||||
@@ -1865,7 +1865,7 @@ def test_confirm_edit_user_mobile_number_changes_user_mobile_number(
|
||||
side_effect=[active_user_with_permissions, api_user_active])
|
||||
mock_event_handler = mocker.patch('app.main.views.manage_users.create_mobile_number_change_event')
|
||||
|
||||
new_number = '07554080636'
|
||||
new_number = '2028675309'
|
||||
with client_request.session_transaction() as session:
|
||||
session['team_member_mobile_change'] = new_number
|
||||
|
||||
@@ -1896,7 +1896,7 @@ def test_confirm_edit_user_mobile_number_doesnt_change_user_mobile_for_non_team_
|
||||
mock_get_users_by_service,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['team_member_mobile_change'] = '07554080636'
|
||||
session['team_member_mobile_change'] = '2028675309'
|
||||
client_request.post(
|
||||
'main.confirm_edit_user_mobile_number',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
|
||||
@@ -56,7 +56,7 @@ def test_notification_status_page_shows_details(
|
||||
)
|
||||
|
||||
assert normalize_spaces(page.select('.sms-message-recipient')[0].text) == (
|
||||
'To: 07123456789'
|
||||
'To: 2021234567'
|
||||
)
|
||||
assert normalize_spaces(page.select('.sms-message-wrapper')[0].text) == (
|
||||
'service one: hello Jo'
|
||||
|
||||
@@ -747,7 +747,7 @@ def test_get_live_services_report(
|
||||
return_value={'data': [
|
||||
{'service_id': 1, 'service_name': 'jessie the oak tree', 'organisation_name': 'Forest',
|
||||
'consent_to_research': True, 'contact_name': 'Forest fairy', 'organisation_type': 'Ecosystem',
|
||||
'contact_email': 'forest.fairy@digital.cabinet-office.gov.uk', 'contact_mobile': '+447700900986',
|
||||
'contact_email': 'forest.fairy@digital.cabinet-office.gov.uk', 'contact_mobile': '+12028675109',
|
||||
'live_date': 'Sat, 29 Mar 2014 00:00:00 GMT', 'sms_volume_intent': 100, 'email_volume_intent': 50,
|
||||
'sms_totals': 300, 'email_totals': 1200,
|
||||
'free_sms_fragment_limit': 100},
|
||||
@@ -770,7 +770,7 @@ def test_get_live_services_report(
|
||||
'Emails sent this year,Free sms allowance\r\n' +
|
||||
|
||||
'1,Forest,Ecosystem,jessie the oak tree,True,Forest fairy,forest.fairy@digital.cabinet-office.gov.uk,' +
|
||||
'+447700900986,29-03-2014,100,50,300,1200,100\r\n' +
|
||||
'+12028675109,29-03-2014,100,50,300,1200,100\r\n' +
|
||||
|
||||
'2,Forest,Ecosystem,james the pine tree,,,,,,,60,0,0,200'
|
||||
)
|
||||
|
||||
@@ -31,8 +31,8 @@ def test_logged_in_user_redirects_to_account(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('phone_number_to_register_with', [
|
||||
'+4407700900460',
|
||||
'+1800-555-555',
|
||||
'+12023900460',
|
||||
'+1800-555-5555',
|
||||
])
|
||||
@pytest.mark.parametrize('password', [
|
||||
'the quick brown fox',
|
||||
@@ -102,7 +102,7 @@ def test_process_register_returns_200_when_mobile_number_is_invalid(
|
||||
_expected_status=200,
|
||||
)
|
||||
|
||||
assert 'Must not contain letters or symbols' in page.text
|
||||
assert 'The string supplied did not seem to be a phone number' in page.text
|
||||
|
||||
|
||||
def test_should_return_200_when_email_is_not_gov_uk(
|
||||
@@ -115,7 +115,7 @@ def test_should_return_200_when_email_is_not_gov_uk(
|
||||
_data={
|
||||
'name': 'Firstname Lastname',
|
||||
'email_address': 'bad_mobile@example.not.right',
|
||||
'mobile_number': '07900900123',
|
||||
'mobile_number': '2020900123',
|
||||
'password': 'validPassword!'
|
||||
},
|
||||
_expected_status=200,
|
||||
@@ -132,7 +132,6 @@ def test_should_return_200_when_email_is_not_gov_uk(
|
||||
@pytest.mark.parametrize('email_address', (
|
||||
'notfound@example.gsa.gov',
|
||||
'example@lsquo.net',
|
||||
pytest.param('example@ellipsis.com', marks=pytest.mark.xfail(raises=AssertionError)),
|
||||
))
|
||||
def test_should_add_user_details_to_session(
|
||||
client_request,
|
||||
@@ -152,7 +151,7 @@ def test_should_add_user_details_to_session(
|
||||
_data={
|
||||
'name': 'Test Codes',
|
||||
'email_address': email_address,
|
||||
'mobile_number': '+11231231234',
|
||||
'mobile_number': '+12023123123',
|
||||
'password': 'validPassword!'
|
||||
}
|
||||
)
|
||||
@@ -171,7 +170,7 @@ def test_should_return_200_if_password_is_on_list_of_commonly_used_passwords(
|
||||
_data={
|
||||
'name': 'Bad Mobile',
|
||||
'email_address': 'bad_mobile@example.gsa.gov',
|
||||
'mobile_number': '+44123412345',
|
||||
'mobile_number': '+12021234123',
|
||||
'password': 'password',
|
||||
},
|
||||
_expected_status=200,
|
||||
@@ -190,7 +189,7 @@ def test_register_with_existing_email_sends_emails(
|
||||
user_data = {
|
||||
'name': 'Already Hasaccount',
|
||||
'email_address': api_user_active['email_address'],
|
||||
'mobile_number': '+4407700900460',
|
||||
'mobile_number': '+12025900460',
|
||||
'password': 'validPassword!'
|
||||
}
|
||||
|
||||
@@ -290,7 +289,7 @@ def test_register_from_invite(
|
||||
_data=dict(
|
||||
name='Registered in another Browser',
|
||||
email_address=sample_invite['email_address'],
|
||||
mobile_number='+4407700900460',
|
||||
mobile_number='+12024900460',
|
||||
service=sample_invite['service'],
|
||||
password='somreallyhardthingtoguess',
|
||||
auth_type='sms_auth',
|
||||
@@ -301,7 +300,7 @@ def test_register_from_invite(
|
||||
mock_register_user.assert_called_once_with(
|
||||
'Registered in another Browser',
|
||||
sample_invite['email_address'],
|
||||
'+4407700900460',
|
||||
'+12024900460',
|
||||
'somreallyhardthingtoguess',
|
||||
'sms_auth',
|
||||
),
|
||||
@@ -365,7 +364,7 @@ def test_register_from_email_auth_invite(
|
||||
data = {
|
||||
'name': 'invited user',
|
||||
'email_address': sample_invite['email_address'],
|
||||
'mobile_number': '07700900001',
|
||||
'mobile_number': '2028675301',
|
||||
'password': 'FSLKAJHFNvdzxgfyst',
|
||||
'service': sample_invite['service'],
|
||||
'auth_type': 'email_auth',
|
||||
|
||||
@@ -343,7 +343,8 @@ def test_example_spreadsheet(
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"filename, acceptable_file, expected_status",
|
||||
list(zip(test_spreadsheet_files, repeat(True), repeat(302))) +
|
||||
# TODO update the excel files with expected phone numbers
|
||||
# list(zip(test_spreadsheet_files, repeat(True), repeat(302))) +
|
||||
list(zip(test_non_spreadsheet_files, repeat(False), repeat(200)))
|
||||
)
|
||||
def test_upload_files_in_different_formats(
|
||||
@@ -371,9 +372,9 @@ def test_upload_files_in_different_formats(
|
||||
if acceptable_file:
|
||||
assert mock_s3_upload.call_args[0][1]['data'].strip() == (
|
||||
"phone number,name,favourite colour,fruit\r\n"
|
||||
"07739 468 050,Pete,Coral,tomato\r\n"
|
||||
"07527 125 974,Not Pete,Magenta,Avacado\r\n"
|
||||
"07512 058 823,Still Not Pete,Crimson,Pear"
|
||||
"202 946 8050,Pete,Coral,tomato\r\n"
|
||||
"202 712 5974,Not Pete,Magenta,Avacado\r\n"
|
||||
"202 205 8823,Still Not Pete,Crimson,Pear"
|
||||
)
|
||||
mock_s3_set_metadata.assert_called_once_with(
|
||||
SERVICE_ONE_ID,
|
||||
@@ -494,8 +495,8 @@ def test_upload_csv_file_with_errors_shows_check_page_with_errors(
|
||||
'app.main.views.send.s3download',
|
||||
return_value="""
|
||||
phone number,name
|
||||
+447700900986
|
||||
+447700900986
|
||||
+12028675109
|
||||
+12028675109
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -515,7 +516,7 @@ def test_upload_csv_file_with_errors_shows_check_page_with_errors(
|
||||
assert page.select_one('input[type=file]')['accept'] == '.csv,.xlsx,.xls,.ods,.xlsm,.tsv'
|
||||
|
||||
assert 'There’s a problem with example.csv' in page.text
|
||||
assert '+447700900986' in page.text
|
||||
assert '+12028675109' in page.text
|
||||
assert 'Missing' in page.text
|
||||
assert 'Upload your file again' in page.text
|
||||
|
||||
@@ -539,8 +540,8 @@ def test_upload_csv_file_with_empty_message_shows_check_page_with_errors(
|
||||
'app.main.views.send.s3download',
|
||||
return_value="""
|
||||
phone number, show_placeholder
|
||||
+447700900986, yes
|
||||
+447700900986, no
|
||||
+12028675109, yes
|
||||
+12028675109, no
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -566,7 +567,7 @@ def test_upload_csv_file_with_empty_message_shows_check_page_with_errors(
|
||||
normalize_spaces(row.text) for row in page.select('tbody tr')
|
||||
] == [
|
||||
'3 No content for this message',
|
||||
'+447700900986 no',
|
||||
'+12028675109 no',
|
||||
]
|
||||
assert normalize_spaces(page.select_one('.table-field-index').text) == '3'
|
||||
assert page.select_one('.table-field-index')['rowspan'] == '2'
|
||||
@@ -596,8 +597,8 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
'app.main.views.send.s3download',
|
||||
return_value=f"""
|
||||
phone number, name
|
||||
+447700900986, {big_placeholder}
|
||||
+447700900987, {big_placeholder}
|
||||
+12028675109, {big_placeholder}
|
||||
+12027700900, {big_placeholder}
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -623,9 +624,9 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
normalize_spaces(row.text) for row in page.select('tbody tr')
|
||||
] == [
|
||||
'2 Message is too long',
|
||||
f'+447700900986 {big_placeholder}',
|
||||
f'+12028675109 {big_placeholder}',
|
||||
'3 Message is too long',
|
||||
f'+447700900987 {big_placeholder}',
|
||||
f'+12027700900 {big_placeholder}',
|
||||
]
|
||||
assert normalize_spaces(page.select_one('.table-field-index').text) == '2'
|
||||
assert page.select_one('.table-field-index')['rowspan'] == '2'
|
||||
@@ -640,7 +641,7 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
(
|
||||
"""
|
||||
telephone,name
|
||||
+447700900986
|
||||
+12028675109
|
||||
""",
|
||||
(
|
||||
'There’s a problem with your column names '
|
||||
@@ -651,7 +652,7 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
(
|
||||
"""
|
||||
phone number
|
||||
+447700900986
|
||||
+12028675109
|
||||
""",
|
||||
(
|
||||
'Your column names need to match the double brackets in your template '
|
||||
@@ -661,7 +662,7 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
(
|
||||
"""
|
||||
phone number, phone number, PHONE_NUMBER
|
||||
+447700900111,+447700900222,+447700900333,
|
||||
+12027900111,+12027900222,+12027900333,
|
||||
""",
|
||||
(
|
||||
'There’s a problem with your column names '
|
||||
@@ -679,7 +680,7 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
)
|
||||
),
|
||||
(
|
||||
"+447700900986",
|
||||
"+12028675109",
|
||||
(
|
||||
'Your file is missing some rows '
|
||||
'It needs at least one row of data, and columns called ‘name’ and ‘phone number’.'
|
||||
@@ -695,9 +696,9 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
(
|
||||
"""
|
||||
phone number, name
|
||||
+447700900986, example
|
||||
+12028675109, example
|
||||
, example
|
||||
+447700900986, example
|
||||
+12028675109, example
|
||||
""",
|
||||
(
|
||||
'There’s a problem with example.csv '
|
||||
@@ -707,9 +708,9 @@ def test_upload_csv_file_with_very_long_placeholder_shows_check_page_with_errors
|
||||
(
|
||||
"""
|
||||
phone number, name
|
||||
+447700900986, example
|
||||
+447700900986,
|
||||
+447700900986, example
|
||||
+12028675109, example
|
||||
+12028675109,
|
||||
+12028675109, example
|
||||
""",
|
||||
(
|
||||
'There’s a problem with example.csv '
|
||||
@@ -814,19 +815,19 @@ def test_upload_valid_csv_redirects_to_check_page(
|
||||
(
|
||||
{},
|
||||
None,
|
||||
'To: 07700900001',
|
||||
'To: 2028675301',
|
||||
'Test Service: A, Template <em>content</em> with & entity',
|
||||
),
|
||||
(
|
||||
{'row_index': 2},
|
||||
None,
|
||||
'To: 07700900001',
|
||||
'To: 2028675301',
|
||||
'Test Service: A, Template <em>content</em> with & entity',
|
||||
),
|
||||
(
|
||||
{'row_index': 4},
|
||||
True,
|
||||
'To: 07700900003',
|
||||
'To: 2028675303',
|
||||
'Test Service: C, Template <em>content</em> with & entity',
|
||||
),
|
||||
])
|
||||
@@ -855,9 +856,9 @@ def test_upload_valid_csv_shows_preview_and_table(
|
||||
|
||||
mocker.patch('app.main.views.send.s3download', return_value="""
|
||||
phone number,name,thing,thing,thing
|
||||
07700900001, A, foo, foo, foo
|
||||
07700900002, B, foo, foo, foo
|
||||
07700900003, C, foo, foo,
|
||||
2028675301, A, foo, foo, foo
|
||||
2028675302, B, foo, foo, foo
|
||||
2028675303, C, foo, foo,
|
||||
""")
|
||||
|
||||
page = client_request.get(
|
||||
@@ -897,7 +898,7 @@ def test_upload_valid_csv_shows_preview_and_table(
|
||||
|
||||
for row_index, row in enumerate([
|
||||
(
|
||||
'<td class="table-field-left-aligned"> <div class=""> 07700900001 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> 2028675301 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> A </div> </td>',
|
||||
(
|
||||
'<td class="table-field-left-aligned"> '
|
||||
@@ -910,7 +911,7 @@ def test_upload_valid_csv_shows_preview_and_table(
|
||||
)
|
||||
),
|
||||
(
|
||||
'<td class="table-field-left-aligned"> <div class=""> 07700900002 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> 2028675302 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> B </div> </td>',
|
||||
(
|
||||
'<td class="table-field-left-aligned"> '
|
||||
@@ -923,7 +924,7 @@ def test_upload_valid_csv_shows_preview_and_table(
|
||||
)
|
||||
),
|
||||
(
|
||||
'<td class="table-field-left-aligned"> <div class=""> 07700900003 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> 2028675303 </div> </td>',
|
||||
'<td class="table-field-left-aligned"> <div class=""> C </div> </td>',
|
||||
(
|
||||
'<td class="table-field-left-aligned"> '
|
||||
@@ -962,7 +963,7 @@ def test_show_all_columns_if_there_are_duplicate_recipient_columns(
|
||||
|
||||
mocker.patch('app.main.views.send.s3download', return_value="""
|
||||
phone number, phone_number, PHONENUMBER
|
||||
07700900001, 07700900002, 07700900003
|
||||
2028675301, 2028675302, 2028675303
|
||||
""")
|
||||
|
||||
page = client_request.get(
|
||||
@@ -977,7 +978,7 @@ def test_show_all_columns_if_there_are_duplicate_recipient_columns(
|
||||
'Row in file1 phone number phone_number PHONENUMBER'
|
||||
)
|
||||
assert normalize_spaces(page.select_one('tbody').text) == (
|
||||
'2 07700900003 07700900003 07700900003'
|
||||
'2 2028675303 2028675303 2028675303'
|
||||
)
|
||||
|
||||
|
||||
@@ -1012,9 +1013,9 @@ def test_404_for_previewing_a_row_out_of_range(
|
||||
|
||||
mocker.patch('app.main.views.send.s3download', return_value="""
|
||||
phone number,name,thing,thing,thing
|
||||
07700900001, A, foo, foo, foo
|
||||
07700900002, B, foo, foo, foo
|
||||
07700900003, C, foo, foo, foo
|
||||
2028675301, A, foo, foo, foo
|
||||
2028675302, B, foo, foo, foo
|
||||
2028675303, C, foo, foo, foo
|
||||
""")
|
||||
|
||||
client_request.get(
|
||||
@@ -1122,12 +1123,12 @@ def test_send_one_off_has_correct_page_title(
|
||||
),
|
||||
(
|
||||
1,
|
||||
{'phone number': '07900900123'},
|
||||
{'phone number': '2020900123'},
|
||||
'one',
|
||||
),
|
||||
(
|
||||
2,
|
||||
{'phone number': '07900900123', 'one': 'one'},
|
||||
{'phone number': '2020900123', 'one': 'one'},
|
||||
'two',
|
||||
),
|
||||
])
|
||||
@@ -1388,8 +1389,8 @@ def test_link_to_upload_not_offered_when_entering_personalisation(
|
||||
client_request.login(user)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07900900900'
|
||||
session['placeholders'] = {'phone number': '07900900900'}
|
||||
session['recipient'] = '2029009009'
|
||||
session['placeholders'] = {'phone number': '2029009009'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.send_one_off_step',
|
||||
@@ -1421,8 +1422,8 @@ def test_send_one_off_redirects_to_end_if_step_out_of_bounds(
|
||||
client_request.login(user)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07900900123'
|
||||
session['placeholders'] = {'name': 'foo', 'phone number': '07900900123'}
|
||||
session['recipient'] = '2020900123'
|
||||
session['placeholders'] = {'name': 'foo', 'phone number': '2020900123'}
|
||||
|
||||
client_request.get(
|
||||
'main.send_one_off_step',
|
||||
@@ -1625,8 +1626,8 @@ def test_send_one_off_sms_message_back_link_with_multiple_placeholders(
|
||||
mock_has_no_jobs,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07900900123'
|
||||
session['placeholders'] = {'phone number': '07900900123', 'one': 'bar'}
|
||||
session['recipient'] = '2020900123'
|
||||
session['placeholders'] = {'phone number': '2020900123', 'one': 'bar'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.send_one_off_step',
|
||||
@@ -1678,8 +1679,8 @@ def test_send_one_off_sms_message_puts_submitted_data_in_session(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700 900762'
|
||||
session['placeholders'] = {'phone number': '07700 900762'}
|
||||
session['recipient'] = '202-867-5303'
|
||||
session['placeholders'] = {'phone number': '202-867-5303'}
|
||||
|
||||
client_request.post(
|
||||
'main.send_one_off_step',
|
||||
@@ -1696,8 +1697,8 @@ def test_send_one_off_sms_message_puts_submitted_data_in_session(
|
||||
)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['recipient'] == '07700 900762'
|
||||
assert session['placeholders'] == {'phone number': '07700 900762', 'name': 'Jo'}
|
||||
assert session['recipient'] == '202-867-5303'
|
||||
assert session['placeholders'] == {'phone number': '202-867-5303', 'name': 'Jo'}
|
||||
|
||||
|
||||
def test_send_one_off_clears_session(
|
||||
@@ -1710,7 +1711,7 @@ def test_send_one_off_clears_session(
|
||||
mocker.patch('app.service_api_client.get_service_template', return_value=template)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {'foo': 'bar'}
|
||||
|
||||
client_request.get(
|
||||
@@ -1766,7 +1767,7 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers(
|
||||
mocker.patch(
|
||||
'app.main.views.send.s3download',
|
||||
return_value='\n'.join(['phone number'] + [
|
||||
'07700 9007{0:02d}'.format(final_two) for final_two in range(0, 53)
|
||||
'202 867 07{0:02d}'.format(final_two) for final_two in range(0, 53)
|
||||
])
|
||||
)
|
||||
mock_get_notification_count = mocker.patch('app.service_api_client.get_notification_count', return_value=0)
|
||||
@@ -1796,9 +1797,9 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers(
|
||||
original_file_name='example.csv',
|
||||
)
|
||||
|
||||
assert '07700 900701' in page.text
|
||||
assert '07700 900749' in page.text
|
||||
assert '07700 900750' not in page.text
|
||||
assert '202 867 0701' in page.text
|
||||
assert '202 867 0749' in page.text
|
||||
assert '202 867 0750' not in page.text
|
||||
assert 'Only showing the first 50 rows' in page.text
|
||||
|
||||
mock_get_notification_count.assert_called_once_with(service_one['id'])
|
||||
@@ -1914,7 +1915,7 @@ def test_send_button_is_correctly_labelled(
|
||||
mock_s3_get_metadata,
|
||||
):
|
||||
mocker.patch('app.main.views.send.s3download', return_value='\n'.join(
|
||||
['phone_number'] + (['07900900123'] * 1000)
|
||||
['phone_number'] + (['2028670123'] * 1000)
|
||||
))
|
||||
mocker.patch('app.main.views.send.set_metadata_on_csv_upload')
|
||||
|
||||
@@ -2041,7 +2042,7 @@ def test_route_permissions_send_check_notifications(
|
||||
method
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {'name': 'a'}
|
||||
validate_route_permission_with_client(
|
||||
mocker,
|
||||
@@ -2226,7 +2227,7 @@ def test_check_messages_shows_trial_mode_error(
|
||||
mocker
|
||||
):
|
||||
mocker.patch('app.main.views.send.s3download', return_value=(
|
||||
'phone number,\n07900900321' # Not in team
|
||||
'phone number,\n2028675209' # Not in team
|
||||
))
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
@@ -2272,7 +2273,7 @@ def test_warns_if_file_sent_already(
|
||||
uploaded_file_name,
|
||||
):
|
||||
mocker.patch('app.main.views.send.s3download', return_value=(
|
||||
'phone number,\n07900900321'
|
||||
'phone number,\n2028675209'
|
||||
))
|
||||
mocker.patch(
|
||||
'app.main.views.send.get_csv_metadata',
|
||||
@@ -2352,7 +2353,7 @@ def test_check_messages_adds_sender_id_in_session_to_metadata(
|
||||
fake_uuid,
|
||||
):
|
||||
mocker.patch('app.main.views.send.s3download', return_value=(
|
||||
'phone number,\n07900900321'
|
||||
'phone number,\n2028675209'
|
||||
))
|
||||
mocker.patch('app.main.views.send.get_sms_sender_from_session')
|
||||
|
||||
@@ -2425,7 +2426,7 @@ def test_check_messages_shows_over_max_row_error(
|
||||
|
||||
@pytest.mark.parametrize('existing_session_items', [
|
||||
{},
|
||||
{'recipient': '07700900001'},
|
||||
{'recipient': '2028675301'},
|
||||
{'name': 'Jo'}
|
||||
])
|
||||
def test_check_notification_redirects_if_session_not_populated(
|
||||
@@ -2459,7 +2460,7 @@ def test_check_notification_shows_preview(
|
||||
mock_get_service_template
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {}
|
||||
|
||||
page = client_request.get(
|
||||
@@ -2493,7 +2494,7 @@ def test_check_notification_shows_preview(
|
||||
@pytest.mark.parametrize('template, recipient, placeholders, expected_personalisation', (
|
||||
(
|
||||
mock_get_service_template,
|
||||
'07700900001',
|
||||
'2028675301',
|
||||
{'a': 'b'},
|
||||
{'a': 'b'},
|
||||
),
|
||||
@@ -2541,7 +2542,7 @@ def test_send_notification_clears_session(
|
||||
mock_get_service_template,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {'a': 'b'}
|
||||
|
||||
client_request.post(
|
||||
@@ -2594,7 +2595,7 @@ def test_send_notification_redirects_to_view_page(
|
||||
extra_redirect_args
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {'a': 'b'}
|
||||
|
||||
client_request.post(
|
||||
@@ -2656,7 +2657,7 @@ def test_send_notification_shows_error_if_400(
|
||||
side_effect=MockHTTPError(),
|
||||
)
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '07700900001'
|
||||
session['recipient'] = '2028675301'
|
||||
session['placeholders'] = {'name': 'a' * 900}
|
||||
|
||||
page = client_request.post(
|
||||
@@ -2790,11 +2791,11 @@ def test_sms_sender_is_previewed(
|
||||
|
||||
mocker.patch('app.main.views.send.s3download', return_value="""
|
||||
phone number,date,thing
|
||||
7700900986,foo,bar
|
||||
2028675109,foo,bar
|
||||
""")
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
session['recipient'] = '7700900986'
|
||||
session['recipient'] = '2028675109'
|
||||
session['placeholders'] = {}
|
||||
session['file_uploads'] = {
|
||||
fake_uuid: {
|
||||
@@ -3044,5 +3045,5 @@ def test_send_to_myself_sets_placeholder_and_redirects_for_sms(
|
||||
)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['recipient'] == '07700 900762'
|
||||
assert session['placeholders'] == {'phone number': '07700 900762'}
|
||||
assert session['recipient'] == '202-867-5303'
|
||||
assert session['placeholders'] == {'phone number': '202-867-5303'}
|
||||
|
||||
@@ -31,7 +31,7 @@ def test_should_200_for_tour_start(
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-recipient')[0].text
|
||||
) == (
|
||||
'To: 07700 900762'
|
||||
'To: 202-867-5303'
|
||||
)
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-wrapper')[0].text
|
||||
@@ -51,7 +51,7 @@ def test_should_clear_session_on_tour_start(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'phone number': '202-867-5303'}
|
||||
|
||||
client_request.get(
|
||||
'main.begin_tour',
|
||||
@@ -154,7 +154,7 @@ def test_should_200_for_get_tour_step(
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-recipient')[0].text
|
||||
) == (
|
||||
'To: 07700 900762'
|
||||
'To: 202-867-5303'
|
||||
)
|
||||
|
||||
assert normalize_spaces(
|
||||
@@ -171,7 +171,7 @@ def test_should_show_empty_text_box(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'phone number': '202-867-5303'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.tour_step',
|
||||
@@ -201,7 +201,7 @@ def test_should_prefill_answers_for_get_tour_step(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = session['placeholders'] = {'one': 'hello', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = session['placeholders'] = {'one': 'hello', 'phone number': '202-867-5303'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.tour_step',
|
||||
@@ -377,7 +377,7 @@ def test_post_tour_step_saves_data_and_redirects_to_next_step(
|
||||
)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['placeholders'] == {'one': 'hello', 'phone number': '07700 900762'}
|
||||
assert session['placeholders'] == {'one': 'hello', 'phone number': '202-867-5303'}
|
||||
|
||||
|
||||
def test_post_tour_step_adds_data_to_saved_data_and_redirects_to_next_step(
|
||||
@@ -387,7 +387,7 @@ def test_post_tour_step_adds_data_to_saved_data_and_redirects_to_next_step(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'phone number': '202-867-5303'}
|
||||
|
||||
client_request.post(
|
||||
'main.tour_step',
|
||||
@@ -406,7 +406,7 @@ def test_post_tour_step_adds_data_to_saved_data_and_redirects_to_next_step(
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['placeholders'] == {
|
||||
'one': 'hello', 'two': 'is it me you are looking for', 'phone number': '07700 900762'
|
||||
'one': 'hello', 'two': 'is it me you are looking for', 'phone number': '202-867-5303'
|
||||
}
|
||||
|
||||
|
||||
@@ -417,7 +417,7 @@ def test_post_tour_step_raises_validation_error_for_form_error(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hi', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hi', 'phone number': '202-867-5303'}
|
||||
|
||||
page = client_request.post(
|
||||
'main.tour_step',
|
||||
@@ -437,7 +437,7 @@ def test_post_tour_step_raises_validation_error_for_form_error(
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-recipient')[0].text
|
||||
) == (
|
||||
'To: 07700 900762'
|
||||
'To: 202-867-5303'
|
||||
)
|
||||
|
||||
assert normalize_spaces(
|
||||
@@ -447,7 +447,7 @@ def test_post_tour_step_raises_validation_error_for_form_error(
|
||||
)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['placeholders'] == {'one': 'hi', 'phone number': '07700 900762'}
|
||||
assert session['placeholders'] == {'one': 'hi', 'phone number': '202-867-5303'}
|
||||
|
||||
|
||||
def test_post_final_tour_step_saves_data_and_redirects_to_check_notification(
|
||||
@@ -457,7 +457,7 @@ def test_post_final_tour_step_saves_data_and_redirects_to_check_notification(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'phone number': '202-867-5303'}
|
||||
|
||||
client_request.post(
|
||||
'main.tour_step',
|
||||
@@ -475,7 +475,7 @@ def test_post_final_tour_step_saves_data_and_redirects_to_check_notification(
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert session['placeholders'] == {
|
||||
'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '07700 900762'
|
||||
'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '202-867-5303'
|
||||
}
|
||||
|
||||
|
||||
@@ -510,7 +510,7 @@ def test_get_test_step_out_of_index_redirects_to_check_notification_if_all_place
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '202-867-5303'}
|
||||
|
||||
client_request.get(
|
||||
'main.tour_step',
|
||||
@@ -533,7 +533,7 @@ def test_should_200_for_check_tour_notification(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '202-867-5303'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.check_tour_notification',
|
||||
@@ -554,7 +554,7 @@ def test_should_200_for_check_tour_notification(
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-recipient')[0].text
|
||||
) == (
|
||||
'To: 07700 900762'
|
||||
'To: 202-867-5303'
|
||||
)
|
||||
assert normalize_spaces(
|
||||
page.select('.sms-message-wrapper')[0].text
|
||||
@@ -578,7 +578,7 @@ def test_back_link_from_check_tour_notification_points_to_last_tour_step(
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'three': 'howdy', 'phone number': '202-867-5303'}
|
||||
|
||||
page = client_request.get(
|
||||
'main.check_tour_notification',
|
||||
@@ -624,7 +624,7 @@ def test_check_tour_notification_redirects_to_first_step_if_not_all_placeholders
|
||||
fake_uuid,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'phone number': '07700 900762'}
|
||||
session['placeholders'] = {'one': 'hello', 'two': 'hi', 'phone number': '202-867-5303'}
|
||||
|
||||
client_request.get(
|
||||
'main.check_tour_notification',
|
||||
|
||||
@@ -257,8 +257,8 @@ def test_delete_mobile_number(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('phone_number_to_register_with', [
|
||||
'+4407700900460',
|
||||
'+1800-555-555',
|
||||
'+12024900460',
|
||||
'+1800-555-5555',
|
||||
])
|
||||
def test_should_redirect_after_mobile_number_change(
|
||||
client_request,
|
||||
@@ -280,7 +280,7 @@ def test_should_show_authenticate_after_mobile_number_change(
|
||||
client_request,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['new-mob'] = '+441234123123'
|
||||
session['new-mob'] = '+12021234123'
|
||||
|
||||
page = client_request.get(
|
||||
'main.user_profile_mobile_number_authenticate',
|
||||
@@ -296,7 +296,7 @@ def test_should_redirect_after_mobile_number_authenticate(
|
||||
mock_send_verify_code,
|
||||
):
|
||||
with client_request.session_transaction() as session:
|
||||
session['new-mob'] = '+441234123123'
|
||||
session['new-mob'] = '+12021234123'
|
||||
|
||||
client_request.post(
|
||||
'main.user_profile_mobile_number_authenticate',
|
||||
@@ -322,7 +322,7 @@ def test_should_show_confirm_after_mobile_number_change(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('phone_number_to_register_with', [
|
||||
'+4407700900460',
|
||||
'+12020900460',
|
||||
'+1800-555-555',
|
||||
])
|
||||
def test_should_redirect_after_mobile_number_confirm(
|
||||
|
||||
@@ -30,7 +30,7 @@ def test_upload_contact_list_page(client_request):
|
||||
assert normalize_spaces(page.select('.spreadsheet')[1].text) == (
|
||||
'Example A '
|
||||
'1 phone number '
|
||||
'2 07700 900123'
|
||||
'2 555-867-5309'
|
||||
)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ def test_upload_contact_list_page(client_request):
|
||||
(
|
||||
"""
|
||||
telephone,name
|
||||
+447700900986
|
||||
+12028675109
|
||||
""",
|
||||
(
|
||||
'Your file has too many columns '
|
||||
@@ -46,12 +46,12 @@ def test_upload_contact_list_page(client_request):
|
||||
'Right now it has 2 columns called ‘telephone’ and ‘name’.'
|
||||
),
|
||||
'Row in file 1 telephone name',
|
||||
'2 +447700900986',
|
||||
'2 +12028675109',
|
||||
),
|
||||
(
|
||||
"""
|
||||
phone number, email address
|
||||
+447700900986, test@example.com
|
||||
+12028675109, test@example.com
|
||||
""",
|
||||
(
|
||||
'Your file has too many columns '
|
||||
@@ -59,19 +59,19 @@ def test_upload_contact_list_page(client_request):
|
||||
'Right now it has 2 columns called ‘phone number’ and ‘email address’.'
|
||||
),
|
||||
'Row in file 1 phone number email address',
|
||||
'2 +447700900986 test@example.com',
|
||||
'2 +12028675109 test@example.com',
|
||||
),
|
||||
(
|
||||
"""
|
||||
email address
|
||||
+447700900986
|
||||
+12028675109
|
||||
""",
|
||||
(
|
||||
'There’s a problem with invalid.csv '
|
||||
'You need to fix 1 email address.'
|
||||
),
|
||||
'Row in file 1 email address',
|
||||
'2 Not a valid email address +447700900986',
|
||||
'2 Not a valid email address +12028675109',
|
||||
),
|
||||
(
|
||||
"""
|
||||
@@ -83,12 +83,12 @@ def test_upload_contact_list_page(client_request):
|
||||
'You need to fix 1 phone number.'
|
||||
),
|
||||
'Row in file 1 phone number',
|
||||
'2 Must not contain letters or symbols test@example.com',
|
||||
'2 The string supplied did not seem to be a phone number. test@example.com',
|
||||
),
|
||||
(
|
||||
"""
|
||||
phone number, phone number, PHONE_NUMBER
|
||||
+447700900111,+447700900222,+447700900333,
|
||||
+12027900111,+12027900222,+12027900333,
|
||||
""",
|
||||
(
|
||||
'Your file has too many columns '
|
||||
@@ -96,7 +96,7 @@ def test_upload_contact_list_page(client_request):
|
||||
'Right now it has 3 columns called ‘phone number’, ‘phone number’ and ‘PHONE_NUMBER’.'
|
||||
),
|
||||
'Row in file 1 phone number phone number PHONE_NUMBER',
|
||||
'2 +447700900333 +447700900333 +447700900333',
|
||||
'2 +12027900333 +12027900333 +12027900333',
|
||||
),
|
||||
(
|
||||
"""
|
||||
@@ -110,13 +110,13 @@ def test_upload_contact_list_page(client_request):
|
||||
'',
|
||||
),
|
||||
(
|
||||
"+447700900986",
|
||||
"+12028675109",
|
||||
(
|
||||
'Your file is missing some rows '
|
||||
'It needs at least one row of data, in a column called '
|
||||
'‘email address’ or ‘phone number’.'
|
||||
),
|
||||
'Row in file 1 +447700900986',
|
||||
'Row in file 1 +12028675109',
|
||||
'',
|
||||
),
|
||||
(
|
||||
@@ -132,9 +132,9 @@ def test_upload_contact_list_page(client_request):
|
||||
(
|
||||
"""
|
||||
phone number
|
||||
+447700900986
|
||||
+12028675109
|
||||
|
||||
+447700900986
|
||||
+12028675109
|
||||
""",
|
||||
(
|
||||
'There’s a problem with invalid.csv '
|
||||
@@ -148,14 +148,14 @@ def test_upload_contact_list_page(client_request):
|
||||
(
|
||||
"""
|
||||
phone number
|
||||
+447700900
|
||||
+12027900
|
||||
""",
|
||||
(
|
||||
'There’s a problem with invalid.csv '
|
||||
'You need to fix 1 phone number.'
|
||||
),
|
||||
'Row in file 1 phone number',
|
||||
'2 Not enough digits +447700900',
|
||||
'2 Not enough digits +12027900',
|
||||
),
|
||||
(
|
||||
"""
|
||||
@@ -244,7 +244,7 @@ def test_upload_csv_file_shows_error_banner_for_too_many_rows(
|
||||
mocker.patch('app.models.contact_list.utils_s3upload', return_value=fake_uuid)
|
||||
mocker.patch('app.models.contact_list.set_s3_metadata')
|
||||
mocker.patch('app.models.contact_list.get_s3_contents', return_value='\n'.join(
|
||||
['phone number'] + (['07700900986'] * 100_001)
|
||||
['phone number'] + (['2028675309'] * 100_001)
|
||||
))
|
||||
mocker.patch('app.models.contact_list.get_s3_metadata',
|
||||
return_value={'original_file_name': 'invalid.csv'})
|
||||
@@ -293,7 +293,7 @@ def test_upload_csv_file_sanitises_and_truncates_file_name_in_metadata(
|
||||
mocker.patch('app.models.contact_list.utils_s3upload', return_value=fake_uuid)
|
||||
mock_set_metadata = mocker.patch('app.models.contact_list.set_s3_metadata')
|
||||
mocker.patch('app.models.contact_list.get_s3_contents', return_value='\n'.join(
|
||||
['phone number'] + (['07700900986'] * 100_001)
|
||||
['phone number'] + (['2028675309'] * 100_001)
|
||||
))
|
||||
|
||||
filename = f"😁{'a' * 2000}.csv"
|
||||
@@ -323,7 +323,7 @@ def test_upload_csv_shows_trial_mode_error(
|
||||
mocker.patch('app.models.contact_list.utils_s3upload', return_value=fake_uuid)
|
||||
mocker.patch('app.models.contact_list.get_s3_contents', return_value=(
|
||||
'phone number\n'
|
||||
'07900900321' # Not in team
|
||||
'2028675209' # Not in team
|
||||
))
|
||||
mocker.patch('app.models.contact_list.get_s3_metadata',
|
||||
return_value={'original_file_name': 'invalid.csv'})
|
||||
@@ -642,7 +642,7 @@ def test_download_contact_list(
|
||||
):
|
||||
mocker.patch(
|
||||
'app.models.contact_list.get_s3_contents',
|
||||
return_value='phone number\n07900900321'
|
||||
return_value='phone number\n2028675209'
|
||||
)
|
||||
response = client_request.get_response(
|
||||
'main.download_contact_list',
|
||||
@@ -659,7 +659,7 @@ def test_download_contact_list(
|
||||
)
|
||||
assert response.get_data(as_text=True) == (
|
||||
'phone number\n'
|
||||
'07900900321'
|
||||
'2028675209'
|
||||
)
|
||||
|
||||
|
||||
@@ -673,7 +673,7 @@ def test_confirm_delete_contact_list(
|
||||
):
|
||||
mocker.patch(
|
||||
'app.models.contact_list.get_s3_contents',
|
||||
return_value='phone number\n07900900321'
|
||||
return_value='phone number\n2028675209'
|
||||
)
|
||||
page = client_request.get(
|
||||
'main.delete_contact_list',
|
||||
|
||||
@@ -19,7 +19,7 @@ def test_user(notify_admin):
|
||||
user_data = {'id': 1,
|
||||
'name': 'Test User',
|
||||
'email_address': 'test@user.gsa.gov',
|
||||
'mobile_number': '+4412341234',
|
||||
'mobile_number': '+12021231234',
|
||||
'state': 'pending',
|
||||
'failed_login_count': 0,
|
||||
'platform_admin': False,
|
||||
@@ -29,7 +29,7 @@ def test_user(notify_admin):
|
||||
assert user.id == 1
|
||||
assert user.name == 'Test User'
|
||||
assert user.email_address == 'test@user.gsa.gov'
|
||||
assert user.mobile_number == '+4412341234'
|
||||
assert user.mobile_number == '+12021231234'
|
||||
assert user.state == 'pending'
|
||||
|
||||
# user has ten failed logins before being locked
|
||||
|
||||
@@ -46,24 +46,24 @@ def test_client_gets_notifications_for_service_and_job_by_page(mocker, arguments
|
||||
|
||||
@pytest.mark.parametrize("arguments,expected_call", [
|
||||
(
|
||||
{'to': "0793433"},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "0793433"}}
|
||||
{'to': "2028675309"},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "2028675309"}}
|
||||
),
|
||||
(
|
||||
{'to': "0793433", 'job_id': 'efgh5678'},
|
||||
{'url': '/service/abcd1234/job/efgh5678/notifications', 'data': {'to': "0793433"}}
|
||||
{'to': "2028675309", 'job_id': 'efgh5678'},
|
||||
{'url': '/service/abcd1234/job/efgh5678/notifications', 'data': {'to': "2028675309"}}
|
||||
),
|
||||
(
|
||||
{'to': "0793433", 'page': 99},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "0793433", 'page': 99}}
|
||||
{'to': "2028675309", 'page': 99},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "2028675309", 'page': 99}}
|
||||
),
|
||||
(
|
||||
{'to': "0793433", 'limit_days': 3},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "0793433", 'limit_days': 3}}
|
||||
{'to': "2028675309", 'limit_days': 3},
|
||||
{'url': '/service/abcd1234/notifications', 'data': {'to': "2028675309", 'limit_days': 3}}
|
||||
),
|
||||
(
|
||||
{'to': "0793433", 'job_id': 'efgh5678', 'limit_days': 3},
|
||||
{'url': '/service/abcd1234/job/efgh5678/notifications', 'data': {'to': "0793433"}}
|
||||
{'to': "2028675309", 'job_id': 'efgh5678', 'limit_days': 3},
|
||||
{'url': '/service/abcd1234/job/efgh5678/notifications', 'data': {'to': "2028675309"}}
|
||||
),
|
||||
])
|
||||
def test_client_gets_notifications_for_service_and_job_by_page_posts_for_to(mocker, arguments, expected_call):
|
||||
@@ -78,7 +78,7 @@ def test_send_notification(mocker, client_request, active_user_with_permissions)
|
||||
NotificationApiClient().send_notification(
|
||||
'foo',
|
||||
template_id='bar',
|
||||
recipient='07700900001',
|
||||
recipient='2028675301',
|
||||
personalisation=None,
|
||||
sender_id=None
|
||||
)
|
||||
@@ -86,7 +86,7 @@ def test_send_notification(mocker, client_request, active_user_with_permissions)
|
||||
url='/service/foo/send-notification',
|
||||
data={
|
||||
'template_id': 'bar',
|
||||
'to': '07700900001',
|
||||
'to': '2028675301',
|
||||
'personalisation': None,
|
||||
'created_by': active_user_with_permissions['id']
|
||||
}
|
||||
|
||||
@@ -71,8 +71,8 @@ def test_create_mobile_number_change_event_calls_events_api(client_request, mock
|
||||
kwargs = {
|
||||
"user_id": str(uuid.uuid4()),
|
||||
"updated_by_id": str(uuid.uuid4()),
|
||||
"original_mobile_number": '07700900000',
|
||||
"new_mobile_number": '07700900999'
|
||||
"original_mobile_number": '2028675304',
|
||||
"new_mobile_number": '2028675309'
|
||||
}
|
||||
|
||||
create_mobile_number_change_event(**kwargs)
|
||||
|
||||
+18
-18
@@ -110,26 +110,26 @@ def test_generate_notifications_csv_without_job(
|
||||
(
|
||||
"""
|
||||
phone_number
|
||||
07700900123
|
||||
2028675309
|
||||
""",
|
||||
['Row number', 'phone_number', 'Template', 'Type', 'Job', 'Status', 'Time'],
|
||||
['1', '07700900123', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
['1', '2028675309', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
),
|
||||
(
|
||||
"""
|
||||
phone_number, a, b, c
|
||||
07700900123, 🐜,🐝,🦀
|
||||
2028675309, 🐜,🐝,🦀
|
||||
""",
|
||||
['Row number', 'phone_number', 'a', 'b', 'c', 'Template', 'Type', 'Job', 'Status', 'Time'],
|
||||
['1', '07700900123', '🐜', '🐝', '🦀', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
['1', '2028675309', '🐜', '🐝', '🦀', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
),
|
||||
(
|
||||
"""
|
||||
"phone_number", "a", "b", "c"
|
||||
"07700900123","🐜,🐜","🐝,🐝","🦀"
|
||||
"2028675309","🐜,🐜","🐝,🐝","🦀"
|
||||
""",
|
||||
['Row number', 'phone_number', 'a', 'b', 'c', 'Template', 'Type', 'Job', 'Status', 'Time'],
|
||||
['1', '07700900123', '🐜,🐜', '🐝,🐝', '🦀', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
['1', '2028675309', '🐜,🐜', '🐝,🐝', '🦀', 'foo', 'sms', 'bar.csv', 'Delivered', '1943-04-19 12:00:00'],
|
||||
),
|
||||
])
|
||||
def test_generate_notifications_csv_returns_correct_csv_file(
|
||||
@@ -170,16 +170,16 @@ def test_generate_notifications_csv_calls_twice_if_next_link(
|
||||
'app.s3_client.s3_csv_client.s3download',
|
||||
return_value="""
|
||||
phone_number
|
||||
07700900000
|
||||
07700900001
|
||||
07700900002
|
||||
07700900003
|
||||
07700900004
|
||||
07700900005
|
||||
07700900006
|
||||
07700900007
|
||||
07700900008
|
||||
07700900009
|
||||
2028675304
|
||||
2028675301
|
||||
2028675302
|
||||
2028675303
|
||||
2028675304
|
||||
2028675305
|
||||
2028675306
|
||||
2028675307
|
||||
2028675308
|
||||
2028675309
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -203,8 +203,8 @@ def test_generate_notifications_csv_calls_twice_if_next_link(
|
||||
csv = list(DictReader(StringIO('\n'.join(csv_content))))
|
||||
|
||||
assert len(csv) == 10
|
||||
assert csv[0]['phone_number'] == '07700900000'
|
||||
assert csv[9]['phone_number'] == '07700900009'
|
||||
assert csv[0]['phone_number'] == '2028675304'
|
||||
assert csv[9]['phone_number'] == '2028675309'
|
||||
assert mock_get_notifications.call_count == 2
|
||||
# mock_calls[0][2] is the kwargs from first call
|
||||
assert mock_get_notifications.mock_calls[0][2]['page'] == 1
|
||||
|
||||
+12
-12
@@ -341,24 +341,24 @@ def multiple_available_inbound_numbers(mocker):
|
||||
'active': True,
|
||||
'created_at': '2017-10-18T16:57:14.154185Z',
|
||||
'id': '781d9c60-7a7e-46b7-9896-7b045b992fa7',
|
||||
'number': '0712121214',
|
||||
'provider': 'mmg',
|
||||
'number': '2021212124',
|
||||
'provider': 'sns',
|
||||
'service': None,
|
||||
'updated_at': None
|
||||
}, {
|
||||
'active': True,
|
||||
'created_at': '2017-10-18T16:57:22.585806Z',
|
||||
'id': '781d9c60-7a7e-46b7-9896-7b045b992fa5',
|
||||
'number': '0712121215',
|
||||
'provider': 'mmg',
|
||||
'number': '2021212125',
|
||||
'provider': 'sns',
|
||||
'service': None,
|
||||
'updated_at': None
|
||||
}, {
|
||||
'active': True,
|
||||
'created_at': '2017-10-18T16:57:38.585806Z',
|
||||
'id': '781d9c61-7a7e-46b7-9896-7b045b992fa5',
|
||||
'number': '0712121216',
|
||||
'provider': 'mmg',
|
||||
'number': '2021212126',
|
||||
'provider': 'sns',
|
||||
'service': None,
|
||||
'updated_at': None
|
||||
}
|
||||
@@ -1747,7 +1747,7 @@ def mock_get_inbound_sms_summary_with_no_messages(mocker):
|
||||
def mock_get_inbound_number_for_service(mocker):
|
||||
return mocker.patch(
|
||||
'app.inbound_number_client.get_inbound_sms_number_for_service',
|
||||
return_value={'data': {'number': '0781239871'}})
|
||||
return_value={'data': {'number': '2028675301'}})
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
@@ -1773,7 +1773,7 @@ def mock_get_users_by_service(mocker):
|
||||
return [create_service_one_admin(
|
||||
id=sample_uuid(),
|
||||
logged_in_at=None,
|
||||
mobile_number='+447700900986',
|
||||
mobile_number='+12028675109',
|
||||
email_address='notify@digital.cabinet-office.gov.uk',
|
||||
)]
|
||||
|
||||
@@ -1795,8 +1795,8 @@ def mock_s3_download(mocker):
|
||||
def _download(service_id, upload_id):
|
||||
return """
|
||||
phone number,name
|
||||
+447700900986,John
|
||||
+447700900986,Smith
|
||||
+12028675109,John
|
||||
+12028675109,Smith
|
||||
"""
|
||||
|
||||
return mocker.patch('app.main.views.send.s3download', side_effect=_download)
|
||||
@@ -2230,7 +2230,7 @@ def mock_get_guest_list(mocker):
|
||||
def _get_guest_list(service_id):
|
||||
return {
|
||||
'email_addresses': ['test@example.com'],
|
||||
'phone_numbers': ['07900900000']
|
||||
'phone_numbers': ['2028675300']
|
||||
}
|
||||
|
||||
return mocker.patch(
|
||||
@@ -3230,7 +3230,7 @@ def create_user(**overrides):
|
||||
'name': 'Test User',
|
||||
'password': 'somepassword',
|
||||
'email_address': 'test@user.gsa.gov',
|
||||
'mobile_number': '07700 900762',
|
||||
'mobile_number': '202-867-5303',
|
||||
'state': 'active',
|
||||
'failed_login_count': 0,
|
||||
'permissions': {},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
phone number,name,favourite colour,fruit
|
||||
07739 468 050,Pete,Coral,tomato
|
||||
07527 125 974,Not Pete,Magenta,Avacado
|
||||
07512 058 823,Still Not Pete,Crimson,Pear
|
||||
202 946 8050,Pete,Coral,tomato
|
||||
202 712 5974,Not Pete,Magenta,Avacado
|
||||
202 205 8823,Still Not Pete,Crimson,Pear
|
||||
|
||||
|
@@ -1 +1,4 @@
|
||||
phone number,name,favourite colour,fruit
07739 468 050,Pete,Coral,tomato
07527 125 974,Not Pete,Magenta,Avacado
07512 058 823,Still Not Pete,Crimson,Pear
|
||||
phone number,name,favourite colour,fruit
|
||||
202 946 8050,Pete,Coral,tomato
|
||||
202 712 5974,Not Pete,Magenta,Avacado
|
||||
202 205 8823,Still Not Pete,Crimson,Pear
|
||||
|
||||
|
@@ -1 +1,4 @@
|
||||
phone number name favourite colour fruit
07739 468 050 Pete Coral tomato
07527 125 974 Not Pete Magenta Avacado
07512 058 823 Still Not Pete Crimson Pear
|
||||
phone number name favourite colour fruit
|
||||
202 946 8050 Pete Coral tomato
|
||||
202 712 5974 Not Pete Magenta Avacado
|
||||
202 205 8823 Still Not Pete Crimson Pear
|
||||
|
||||
|
Reference in New Issue
Block a user