From 7441f9dfae20927d3b055c8e978a0abc126d6b00 Mon Sep 17 00:00:00 2001 From: Eugene Alvin Villar Date: Wed, 14 Feb 2018 06:11:05 +0800 Subject: [PATCH] Finalize initial set of Tenure Relationship Records tests (#77) --- cadasta/test/__init__.py | 2 +- cadasta/test/base_test.py | 2 + cadasta/test/conftest.py | 91 +- ...ionnaire with custom party attributes.xlsx | Bin 0 -> 9405 bytes ...nure and conditional party attributes.xlsx | Bin 0 -> 9899 bytes ...onnaire with custom tenure attributes.xlsx | Bin 0 -> 9417 bytes cadasta/test/fixtures/main.json | 228 +- cadasta/test/fixtures/questionnaires.json | 2912 +++++++++++++++++ .../record_tests/test_location_deletion.py | 88 + .../test_tenure_relationship_browsing.py | 80 + .../test_tenure_relationship_creation.py | 864 +++++ .../test_tenure_relationship_deletion.py | 35 + .../test_tenure_relationship_updating.py | 71 + cadasta/test/resource_tests/test_attaching.py | 9 +- 14 files changed, 4362 insertions(+), 20 deletions(-) create mode 100644 cadasta/test/files/Questionnaire with custom party attributes.xlsx create mode 100644 cadasta/test/files/Questionnaire with custom tenure and conditional party attributes.xlsx create mode 100644 cadasta/test/files/Questionnaire with custom tenure attributes.xlsx create mode 100644 cadasta/test/record_tests/test_tenure_relationship_browsing.py create mode 100644 cadasta/test/record_tests/test_tenure_relationship_creation.py create mode 100644 cadasta/test/record_tests/test_tenure_relationship_deletion.py create mode 100644 cadasta/test/record_tests/test_tenure_relationship_updating.py diff --git a/cadasta/test/__init__.py b/cadasta/test/__init__.py index f0ede3d..2b8877c 100644 --- a/cadasta/test/__init__.py +++ b/cadasta/test/__init__.py @@ -1 +1 @@ -__version__ = '0.4.1' +__version__ = '0.5.0' diff --git a/cadasta/test/base_test.py b/cadasta/test/base_test.py index 0c5448d..879f016 100644 --- a/cadasta/test/base_test.py +++ b/cadasta/test/base_test.py @@ -50,6 +50,8 @@ def update_form_field(self, field_name, field_value): Select(field).select_by_value(field_value) else: # Assume tag_name is 'input' with type 'text' or 'password' field.clear() + if not isinstance(field_value, str): + field_value = str(field_value) field.send_keys(field_value) def assert_form_field_has_error(self, field_name, error_msg): diff --git a/cadasta/test/conftest.py b/cadasta/test/conftest.py index d3eb553..ca95dd4 100644 --- a/cadasta/test/conftest.py +++ b/cadasta/test/conftest.py @@ -133,6 +133,24 @@ def conditional_attrs_prj(all_fixtures): if 'functest-conditional-attrs-prj-' in prj['slug']) +@pytest.fixture(scope='session') +def custom_party_attrs_prj(all_fixtures): + return next(prj for prj in all_fixtures['organization.project'] + if 'functest-custom-party-attrs-prj-' in prj['slug']) + + +@pytest.fixture(scope='session') +def custom_tenure_attrs_prj(all_fixtures): + return next(prj for prj in all_fixtures['organization.project'] + if 'functest-custom-tenure-attrs-prj-' in prj['slug']) + + +@pytest.fixture(scope='session') +def custom_conditional_attrs_prj(all_fixtures): + return next(prj for prj in all_fixtures['organization.project'] + if 'functest-custom-conditional-attrs-prj-' in prj['slug']) + + @pytest.fixture(scope='session') def another_prj(all_fixtures): return next(prj for prj in all_fixtures['organization.project'] @@ -156,16 +174,83 @@ def all_org_members(all_fixtures, basic_org): return members +# Under FuncTest Records Prj +@pytest.fixture(scope='session') +def basic_parcel(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'xqzcnvuy7u9gywqkp2xa3rbn' == location['pk']) + loc['type_label'] = 'Parcel' + return loc + + +# Under FuncTest Custom Attrs Prj +@pytest.fixture(scope='session') +def custom_building(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'tcqrxxaep8jcf83xnynh6pxi' == location['pk']) + loc['type_label'] = 'Building' + return loc + + +# Under FuncTest Conditional Attrs Prj +@pytest.fixture(scope='session') +def basic_apartment(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'szcmfx455yt3r3q43thxk2mr' == location['pk']) + loc['type_label'] = 'Apartment' + return loc + + +# Under FuncTest Custom Party Attrs Prj +@pytest.fixture(scope='session') +def basic_rightofway(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'wdxgeavx3q95vmtr8xkyu2ac' == location['pk']) + loc['type_label'] = 'Right-of-way' + return loc + + +# Under FuncTest Custom Tenure Attrs Prj +@pytest.fixture(scope='session') +def basic_national_park(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'sq8nvq4syhy7zdf4tsrwia54' == location['pk']) + loc['type_label'] = 'National Park Boundary' + return loc + + +# Under FuncTest Custom-Conditional Attrs Prj +@pytest.fixture(scope='session') +def basic_community_boundary(all_fixtures): + loc = next(location for location in all_fixtures['spatial.spatialunit'] + if 'zw27euyqjmvnvxfedh4s7qae' == location['pk']) + loc['type_label'] = 'Community Boundary' + return loc + + +# Under FuncTest Records Prj @pytest.fixture(scope='session') def basic_individual(all_fixtures): return next(party for party in all_fixtures['party.party'] if 'Basic Individual' == party['name']) +# Under FuncTest Custom Tenure Attrs Prj @pytest.fixture(scope='session') -def basic_parcel(all_fixtures): - return next(location for location in all_fixtures['spatial.spatialunit'] - if 'xqzcnvuy7u9gywqkp2xa3rbn' == location['pk']) +def basic_group(all_fixtures): + return next(party for party in all_fixtures['party.party'] + if 'Basic Group' == party['name']) + + +# Under FuncTest Records Prj +@pytest.fixture(scope='session') +def basic_water_rights(all_fixtures, basic_parcel, basic_individual): + tenure_rel = next(rel for rel in all_fixtures['party.tenurerelationship'] + if 'yku4hjxu5rka882n84jyw5wj' == rel['pk']) + tenure_rel['location'] = basic_parcel + tenure_rel['party'] = basic_individual + tenure_rel['type_label'] = 'Water Rights' + return tenure_rel @pytest.fixture diff --git a/cadasta/test/files/Questionnaire with custom party attributes.xlsx b/cadasta/test/files/Questionnaire with custom party attributes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7ef172230590273ebde858567e63d8f233563df2 GIT binary patch literal 9405 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 literal 0 HcmV?d00001 diff --git a/cadasta/test/files/Questionnaire with custom tenure and conditional party attributes.xlsx b/cadasta/test/files/Questionnaire with custom tenure and conditional party attributes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e2243dfb6a2178f694f2c1488e9003770fa79a54 GIT binary patch literal 9899 zcmbVSWmp_bv&P+m6WkpZhv4oW+}+*XCAhl=T@u{gU4sM*76|U{TsWVceCK}m{J1sG zJUiPx_3ln}PrcP$r63Isfer!#0|R2^B_#v$o4kL$cDH8Kb2PDbVsx`}v@*1_vtn?! zv1WK{X;18y>jfZ$o_IwJxn(rq!sHjX5*6wUy8BbPWLnywE`l~R>Y>1Vuqfk{;nrx_ ze0f3gE4wnl>w`wUS*50`!Grj)nYro$x9ZC17F$(;HHQg}KZDlbqaSaJM_a`dN=dz_ zj>l%kmnWV1eWujN5|}8M*?z2$;_*ymQ3iUIUcA5xXFh{Y9q}dO%4Z9dZ z`=s#+$hH3}!#c3PGAfddjFpntE$_rZ+R5!*@x1F`-jDH_ny_`t;rIEjXbrDs$-R24 zt<$mJv0I8VoMN2y>u7>EY+^Lqu0beVO2TI0SjO-xhgZ9TOw;Gn**WW9{2UW%=)Xz` zZ-kE0M*s#f$$L+yhl}#<5p_qUJ#6f@Zoao?sWFycJ8YWxy)GViu(Gqu^V}MiOxT5G zL%uS2gFSE`ANDLJARtW2o|$P~I|V8vUl)xsbzxJ$n~Ku3g=>j0 zvT%wYpcLNC8)_W+>AjBR&3f^%bN72AE1kY5To+dCnzi8FGTXI9C2?3dW=jsSN^x0; zXnc`5Q9P+8Di1YyQm8B4$fc98Dyv-brWTP6A7R0@-9R|rC$x)mFZwVgwhm|+&z zdIL6;N3mNZ5}YQ>Esf-_2tZBL%rwBfb-c|c4u=TCa~2}`8XTGqZQ8!lJj0Q+5La(7 z?ehEDUXw8}y}HOcEyZIBdNSZjp<9h~mT-Pzn)OF*+j@H=9VJi9VhnNqr|@*;^>3rx z=y((mw%?mR*RKL1E!SqaF(`kgI61NxJ$BoCgSmgXJn^73Kj9x z%C?|Uq=n{qt1sN%9N7U~H|G08O*?Cn0}dXTiC<)K)tL*VA}izK4Tp;^eiDnN?+r=~ zik?z_7vneX8^L0mKBf^S6;k4^Tdgc(^x#k>-PxeHqo+?g;HAy~uC5~8`Rf^L-XdgJ zVOGkNd0PMHqA8Fy?Wd=Z;@)ZVAo+f(Mmon@ff&zs)#!FB!1CBWDLrnCfn01Oe{Wfe zr0skSw{UBf*q)3HcEbn}v?R8Y=TzmlsuZykxl}})@Mm{ewTok88&UoWgap33(*V6~$E&p_9h<%(qn&>_O3px8n@y|JtC`#I z2rVZ|KTqSu^p|Bb_@!0acev)PV^+U} z>&+zT)kwau_EP9hdxYaKpGYf^L7Jg41c@k}1vUwM+Sz&6={TmY$fJ6$iD{V}GGcso z6H&v{Sh!a2R==Il<@7w=DXqquTo|Q|JXz>2B-f5*2Rv-Yy#YMl`~x?E zvFaclCx!3}D~G(mZ4eEwQMR0JfoDVHgah0FI(v{|&Gn6di;9X-y>paTEh)Au6qg5& z6$S&7fRV=uToBt*AvLRM4>Mu|>$X^{88+Qq1RUZxrYy#fu`E3!0B=rTMeAM%_+ZJy zVUc59`j=w=VdgG$=Da(ek6EWjOA{o0jk53eFz8vrAFr68W&{I;g_3lFOb&4RFOf&} zB@AGjS4Q7?63GtBM$!70pwoYHT0}S*uJDK z14#~n&HJ#@r#&4l2fWhBW!SmQSy}o3v%z?uqA^Xd`g5uTqj*AY6q; zr8m!fiN^TEn4#Fn#?>&rbG-^P9?s{b%r}A*5o6&^+_Fo3b+ayMJ};re?5J;=nQ^~I z8FdJkxM%6QfJT0;GvAKJD6I@xHNM9H4Ruj%F-3YR_VPY5-73LdmjimHse4-63z4() zpe1)@RWc0C%*`KSZ9_ZJX!ZF!Q79FT zRO_q6Y+V?K9mY3WDY@7$!hiw+`A+tCw1WK)T6tq$Cvy`MXD7x#K3LwUrCoJ7W|!@-vu0{O-BM?*lBQiT1OBM@@ zS)alAb2IvGSKWpbg99rplOeNm(&!VapO5y7XJmY}h!RPXv9z}#RHwY3WQ-JldLUC| zR{*QDwz}2|WWX?-Dk_U2Mq=J@GQ+13wRU8gBAk3*W$HjqgdIW2roQMf?k79%Ql1^0 zRy7SBW(!=(3|K>AZ{^dGb=ET&J=T%tDj7c|^qz@N00d`@#ajAWJ=)5~*nN1I4=!;O zf~{P#RL~G=7=;=geT1J|RSxOex;Z9dOsm9-6$aV*G~f+Cxar=8ZC?gRUn||GeyB*g zh56+_!dN}$^5r(uVh)~l4GZNb_^3_ia>7aqY>I}Mp8JnkRgkgkkH<;7yb39an(9~( z>(nd5$S4=6(rW6Ud@8>HsxmOCRATA1PiP?9%25+i$;(kNRLba~K{u1W5B0McmjPKH zkKku4bs7(oJRM1PI4(a*gyu9RuYZS~0_up(gZ5*`kDY@zx#Bk|e=nQf^D)yD&s8;} z;N|XMkEtKQZOr+AoQlqPBFi)MICIXkZ5n>J#sldSi!iTq^3}&mn6W`bP|w>q#)V3l zCqVuL;b}@zvq7cz5}X?VdQIR+1^zh`44RQ>8bY1zdH#%6!UT#wX$}hYaRNx+LO{(~ zBoou)IhMfVRU^gl)LBhAPa1PHAj_I7V^#rW2anSjcZR)Xh&r)Ga9$kJh7*(}`+4_> zxB!q-Upm7yYmd5m|7@v#^>GbNdRpWQ>2yv!RI7zQ!SS?~ngi>1ehc>47aC!SAKlH2 z-R|%UhjJUj@9Aw5*4KrsZG3U7o0&DDo71n^LCNOLuwN!|21xVAE123K^ zn6ObaEf|i9&qY{3fRvnW|bI%EcE>E z+IK+c9?{__Blmvlu%6_Iau*iS}*+m!CBQN-2V1bGi%FfzvB`QJLMS#`OjV z2fHn{$LXz=oOpr^i7_>iWXc$B^y~7Ui^Hw-7)3mCz{{sS{iS8H-G%o~!bZgtC?ck} z4Z(Cc)q88s7Q!E{P!Mz&*l36#OLwGx3g z{tNva?Zt}st+sMfnfpI@Udk% zh%PDhYV$b;D?1>{W=5FU1z`jqtK_Tz&cihILv;xAFzu0HcZASdsf`WmLuw5nWW!b8 zoo~A&d@{wP%VdWib84?*_EhF&JfV#4Qf-UoG3QG~Se?$ijOg%J!h^D*B7!P{WnpBf zt!34g_&de)?-=fbMO$7zs~?MJXDDycXveqGW_LBdApFq$pyA%pzw_!PRG;*?CzH~h za$hDBW|D{Q&VbIU#dRw54QNFpKQs0u)htfM_rG~5{jz^=0q@Vj;?o=RRiVwngRhvP zMY76i!;nvJigIsp;~wW_iD~;ia9TyUvu@ z7O_if4%4<_Dp(gJ-T9)mmP^=FUrspPwaun0P70owpm^NQj?p|990i6=#Yfy@W^0|$ z;8A^a_sSC{OJ1?yL3h?qx@$&1JfmP^hs_`FkrKZf2w{BTfb;9U*l2#XprM>q-i!Is z_f=-xQy=q_3C+yi$5UwOG_&Tj6*~Ov)*ThtzHd{Ebjkz#Ey6CFOWC@@R>Gx`SI<6K zt;##4;MSjLW!zKyz|fw_tNZ$H6Wn7zttY4(khGEU>65gORWQAC3obCt%Y^bVYQ zhfNDj4Ue1}1P|jA3y>AqWqgN~4-Fnhus$6+_d??M&YRQzlsE=~Cryo!1gl#d9GY-r zs4K%klt}-ZItq+BTgq!QbvU$~U=%4h{1QfhKZcDU5t9UHfPcSdVBngUwEp61LiN$LN1*iKdk@h`dL{npAY~5l2w~!Rb{%&F0OPll_^*?(2e-vKs=B3xU?-jVc3iA!)7>H)%B@ z7YlP4sv1Cm>0#7FuOtI@AqhZBlOKa%7^5_`=Y!?uCF#Z0%jO!6hCS21s0>AWZW>1hGz59@zMqw;vfDEva2RPc6++u2S}7P^Q5g zy1_?)KCC1du6M`-940d<{7xGa)i?X8)F8lbm?HwbaQeH{x*=w?E`+V*2oD-pGYB<1 z?}CekF2d8XkNeTVZwv#w+2j}YyomYhd@rhtg${VS`xFk85N2B-5(Ubo0qt!3bpsc$ zD|2cW!UqhwQ#z&FOo?4;;ppIN#7bjLl*qzXJcL#>ZJ|aK0WBehdA9j!Ih_Vi`B#~- zSEywwJBMzIQd>oB{ zyHnT_i`4tHhzD&h1{tgb?ua1wpQ0u5KU}Hf&B!V*Z^>Y_`T2Z4e#mrve?B`=C$guU zze8@j;A3qy+FU5lrDHUoUsG0RXqe4kT}=DytCK}$q~`u}p?ug=cC|5wto~8#q3%Py zRd+SL&9!P;IPM!Z>h9Q*}nYG2Sil#V{@uHSmk`-@1HPbcM=EM7uuQG*Z z_}aLt=4pF@ghbF4@J4p-{DE2GE(}Z)6T8=O!k1 zu3w7llLoq-WJ)%c>Ad{B8IJFg%rs`wipx$9)$!ReGdGTJf27|pu|ZAvfxYpW)bllW z#A{TmP4)laGv(@=#nBH$HWAG_0V~v)`0&Z1(Vw#^ zI(^B=M<=+%BcYuyMQN2|J%&;XZivZ3kWbmA z+8y94?eNUlv$-BZFA+B4jfL*LETY{On@ji+``T&p0^W7oM_KX&Ea3EbrJIM!Lu7jN zsify}n}W74O1kYEqg9-!?1Ae!T@}^b%$c1@VrAJPW7QfwZ1&TQxyWF#07IRyCf72r-LKY;1eE8r2OjO%5L>w%J$y2_Ib3ZIh8K{MaHqpCmv(h;CvOho~7c`Et=RzWCj72w@~ zP#G{t;#>hiUey4u8>xkUeQKD-K0_)3D5oNYl7@5^T&K#H3(PSB32*Ste`8D%9Y2 zfl~>=>kLvtyvtNhM?h@X59)9|h#~frQa?ZmZYgm z?HFB-DzLA4UT?(`HD@d$dhJk{)P3LLs!n{(BLNrK%}5M$f*$bXDk_vnK(3AZHO@Ug zIElzwF}RQ@54$}+KQAZ9eD|>(z2OZbxVwO=y9%3+TB7s>GW%d&nb_ARIJpZUaw9P? zc>VRf&q1#!H+2u0Bg4iNo|hGxa!FK(JwVdY8b5{mA_<@isK^Y?JD|uXn8$Cq&e*`v zP1ILM6{M!33RO~2m?jOes>IRVV1o@MCw(DvRW z>FzICg{ryB1{#por7NNEq$Vg#HnTb&u@%s^QFK?mdu{l4qYZlj?bx4fcc+V8nu z;E4>XixuF;MC`$dvDrhts8tkWyCYr=5Drk6fEnv5xJl4oz;3Yxi+C^%w(`PwcMS&{ zfa6}Hu7u!>jt-94e@deKIl%*XOp{r$edKO=ez;!|i%g~Vl~%)Pj@$_*oj+2ks6Qb! zVl;9#mNb=SZ5_9l;^Ih{hR_kesS4JlTOTjBg1euu!i{19PT}<-jwf@&B8dC#)eS%V%9U&W|>t9TJ zvT0`VU$UgjiA*W04o%NYeWy%QE!!`s^cK^S!>`6}Y*dB%ZS>~zhLp{f9STbp?;F^= zoV397$)BiT27LQN4Dox$9+5*C;NrVA&150rxKY3pNL}ot6}1}Du!MS)#fLUsp5oPJ zuOmjI?jlng_;DG3Emi>0B4RYUiy%of_j^k&X^kbKnv%vwxr8_oLsR3{h**`#l8KG1 z+)?eTIv{wWHsQ#y^eLT0mb7DSI&yl5EdruQPg)v6omdt=K^yu18!9Ce&}qpzJ#HyC&net&UvEvnW%d~lwf)W zyt8&ux13};wv`v9T6AE5T&LW~m{nBx;!WeGd0R$Qfo>fFbUUC8|7sO6v_RJ}ldP_3 z&XY~nH|{I`epH9be5a@|sk^_S6Nv>r_b0~QWg{rZy$=`EO%JV5PmusDe$cmxMFl$) zh6e@$a`m^_CB%Pbmz+JUP5wwL9i<7%F9WbcPaZH*PDm{*;AJFH04B?j#8lIT7SJ3H zsPKa^)>!X-pZEqXGLrJ6kE=+MBah~D2|J&yzaVwrm2K_D(~K9wob3(`hDV4L%WM&M zncwt?M-7d*gqEtxBz~n{)WC|pgr$zC zq^S9dc_z5etY23RaM5hb)?}NA^{BS#Izf*6Pm8N8jI-P<@Qf%$1Vy9rrTV4>YZSX)P&ZwuLb+RPp1ZlxrAB>+-_OcF?J}L5s^kSeT z>7Z4H9tP5+w39+n@#G)B8y(KZ{7})q4|eo5lfS;PuJt6$`*Qe85?vOYA?j*X6(495 zSN79|j=qnIQ%tVOS_o^b z)Xnhtq96O_Rqn|#)0)>{tgFvJWlieDgYWaVdv5m`FB=*!LJ1vBv!)V~2O!Q*tB2$X zuXHUs91fYfa$}$YajM+Gcztwpf{En!q;JmtT)w1GPp5varHdeJUf`BMbPUOrcsZ!T z;blp1y%O-H;k6mtQYrmG?x{r(Rv-MjX6CBq)$QC5-~QP4=C8$asehgCIH-T;Na0`S z`#*Bdf8?3V6DFm=nNY$`d?Mn!+!`=MjBDG&r!pmc{L{vs4LH&PI4(Y3K`@%YBIsC2 z--~e$;fxhj)2oOq@dz=yGELg3m`7}{f?TAV1Kf5iwQVO9^J%Q`!rOev?Td_^N8-DpC zqqz^$5B5mugNq>S*a2NQ?I}Ux22eHumCHXmsjg81zbWa*1fN`)1*fjzUv^l2DYjJg zI@&gQTyQp;$K(JvdftF1n{H^h+IRRamW)`?$SGFYeP;LOGRuXwa}Qtb-~;-1mU{QQ zrHt$xP2Nmpqcr?luz=Ejff0Z5sa8TkLy`uxj8g%KDoSKKkW(DmSAA$P^UNzZ4MpRb z*?1dmcIfSEzORq`9jJ;$_Q?>{AG7>p3(e4h=er4s^*F2H165(cnDwEyw&4(i&-GO` z<)D#p+Ur4eMm^}pk>=P%a@P494ChEk{jyfLF$7By?-@EgAX%d~wU$5}hvR4X0IbR+ zT%uA;q8ZucVIb60vs3qB+{k3gCS$e>7DMeZZ!kZRB^-Nulb0m^w-JHb$eUGu9gWDpox5nS zBcdg2XZz~;ob^6>*qb=%yp73tlA?4k06k>whE__qsC^mYokb&bw>Um$E;)spm3n6I z56(uv6WJXo8rvwuE9$!T9q*kk+0nByn;LQ`<_T3pg-g*;RW6&uHdOhU)No2CW3iu=_ZXgF1CgTJ>oGaZlZv2YvCAAQF;Z3w6v!k}U<`ZO&pMPRaX8w|U z%Q`41e;_ag^vVd~M>^^aXJO`el+e+v)o4PXw*U|*7WHF2@g@Kd=vhL#8#Bscws=RF zZgeW|i0}d!bS0l`dGC!`&U!uNJKz#zrZ+a>Oz7c6=(maF*e7Y9;~yepX>#ra=_FMmb&J=5`))%;WZq5nYmuQ|@YqWr$U^q(l9 zublDvKmLmHM~>vLD8EPZ|B0gdN=yF*<&T}IzoPsey1hmIe+mQ6zfu0R4*09`?>zVx z-Tf(HxPK@+{X5qCtLpDe@kW$?iW|Xy(B@wie|Ma3MDnM^5&myl`K$KtFZr8u{Zm?q se$)P!tNp9`@3ZvH6Z|PMB>&YfC`d!TF1SEI;9rl?SI06!`u6RA0HwH@9smFU literal 0 HcmV?d00001 diff --git a/cadasta/test/files/Questionnaire with custom tenure attributes.xlsx b/cadasta/test/files/Questionnaire with custom tenure attributes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..efeb484a80bcc8940dcd790ed2ee5ceb96502aee GIT binary patch literal 9417 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