Merge branch 'philip/refactor-integration-tests' into 'master'
Philip/refactor integration tests See merge request grassrootseconomics/cic-internal-integration!182
This commit is contained in:
		
						commit
						7027d77836
					
				@ -294,6 +294,7 @@ def process_display_user_metadata(user: Account, display_key: str):
 | 
			
		||||
            preferred_language=user.preferred_language,
 | 
			
		||||
            full_name=absent,
 | 
			
		||||
            gender=absent,
 | 
			
		||||
            age=absent,
 | 
			
		||||
            location=absent,
 | 
			
		||||
            products=absent
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								apps/cic-ussd/tests/fixtures/integration.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								apps/cic-ussd/tests/fixtures/integration.py
									
									
									
									
										vendored
									
									
								
							@ -124,46 +124,6 @@ def second_profile_management_session_id() -> str:
 | 
			
		||||
    return session_id()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def first_account_change_given_name() -> str:
 | 
			
		||||
    return fake.first_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def second_account_change_given_name() -> str:
 | 
			
		||||
    return fake.first_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def first_account_change_family_name() -> str:
 | 
			
		||||
    return fake.last_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def second_account_change_family_name() -> str:
 | 
			
		||||
    return fake.last_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def first_account_change_location() -> str:
 | 
			
		||||
    return fake.city()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def second_account_change_location() -> str:
 | 
			
		||||
    return fake.city()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def first_account_change_product() -> str:
 | 
			
		||||
    return fake.color_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def second_account_change_product() -> str:
 | 
			
		||||
    return fake.color_name()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.fixture(scope='session')
 | 
			
		||||
def first_profile_management_session_id_1() -> str:
 | 
			
		||||
    return session_id()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								apps/cic-ussd/tests/integration/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								apps/cic-ussd/tests/integration/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
# INTEGRATION TESTING
 | 
			
		||||
 | 
			
		||||
This folder contains integration tests.
 | 
			
		||||
 | 
			
		||||
## OVERVIEW
 | 
			
		||||
 | 
			
		||||
There are four files defining the integration tests.
 | 
			
		||||
 | 
			
		||||
* **test_account_creation**: Tests account sign up process.
 | 
			
		||||
* **test_transactions**: Tests transactions between two accounts.
 | 
			
		||||
* **test_profile_management**: Tests that account metadata can be edited.
 | 
			
		||||
* **test_account_management**: Tests that account management functionalities are intact.
 | 
			
		||||
 | 
			
		||||
## REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
In order to run the transaction tests, please ensure that the faucet amount is set to a non-zero value, ideally `50000000`
 | 
			
		||||
which is the value set in the config file `.config/test/integration.ini`.
 | 
			
		||||
 | 
			
		||||
This implies setting the `DEV_FAUCET_AMOUNT` to a non-zero value before bringing up the contract-migration image:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
export DEV_FAUCET_AMOUNT=50000000
 | 
			
		||||
RUN_MASK=1 docker-compose up contract-migration
 | 
			
		||||
RUN_MASK=2 docker-compose up contract-migration
 | 
			
		||||
```
 | 
			
		||||
@ -214,12 +214,13 @@ stages:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '28'
 | 
			
		||||
        Content-Length: '51'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Enter first name\n0. Back"
 | 
			
		||||
          expected_response: "CON Balance {gift_value} {token_symbol}\n1. Send\n2. My Account\n3. Help"
 | 
			
		||||
    delay_before: 10
 | 
			
		||||
 | 
			
		||||
  - name: Pin number confirmation [{second_account_pin_number} - second account]
 | 
			
		||||
    request:
 | 
			
		||||
@ -232,227 +233,6 @@ stages:
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '37'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Weka jina lako la kwanza\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Enter first name [first_account_given_name - first account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{first_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{first_account_phone_number}"
 | 
			
		||||
        text: "1*{first_account_pin_number}*{first_account_pin_number}*{first_account_given_name}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '29'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Enter family name\n0. Back"
 | 
			
		||||
 | 
			
		||||
  - name: Enter first name [second_account_given_name - second account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{second_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{second_account_phone_number}"
 | 
			
		||||
        text: "2*{second_account_pin_number}*{second_account_pin_number}*{second_account_given_name}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '37'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Weka jina lako la mwisho\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Enter last name [first_account_family_name - first account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{first_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{first_account_phone_number}"
 | 
			
		||||
        text: "1*{first_account_pin_number}*{first_account_pin_number}*{first_account_given_name}*{first_account_family_name}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '51'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Enter gender\n1. Male\n2. Female\n3. Other\n0. Back"
 | 
			
		||||
 | 
			
		||||
  - name: Enter last name [second_account_family_name - second account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{second_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{second_account_phone_number}"
 | 
			
		||||
        text: "2*{second_account_pin_number}*{second_account_pin_number}*{second_account_given_name}*{second_account_family_name}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '64'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Weka jinsia yako\n1. Mwanaume\n2. Mwanamke\n3. Nyngine\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Select gender [Male - first account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{first_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{first_account_phone_number}"
 | 
			
		||||
        text: "1*{first_account_pin_number}*{first_account_pin_number}*{first_account_given_name}*{first_account_family_name}*1"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '31'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Enter your location\n0. Back"
 | 
			
		||||
 | 
			
		||||
  - name: Select gender [Female - second account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{second_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{second_account_phone_number}"
 | 
			
		||||
        text: "2*{second_account_pin_number}*{second_account_pin_number}*{second_account_given_name}*{second_account_family_name}*2"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '27'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Weka eneo lako\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Enter location [first_account_location - first account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{first_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{first_account_phone_number}"
 | 
			
		||||
        text: "1*{first_account_pin_number}*{first_account_pin_number}*{first_account_given_name}*{first_account_family_name}*1*{first_account_location}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '55'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Please enter a product or service you offer\n0. Back"
 | 
			
		||||
 | 
			
		||||
  - name: Enter location [second_account_location - second account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{second_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{second_account_phone_number}"
 | 
			
		||||
        text: "2*{second_account_pin_number}*{second_account_pin_number}*{second_account_given_name}*{second_account_family_name}*2*{second_account_location}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '42'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Weka bidhaa ama huduma unauza\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Enter product [first_account_product - first account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{first_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{first_account_phone_number}"
 | 
			
		||||
        text: "1*{first_account_pin_number}*{first_account_pin_number}*{first_account_given_name}*{first_account_family_name}*1*{first_account_location}*{first_account_product}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '51'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Balance {gift_value} {token_symbol}\n1. Send\n2. My Account\n3. Help"
 | 
			
		||||
    delay_before: 10
 | 
			
		||||
 | 
			
		||||
  - name: Enter product [second_account_product - second account]
 | 
			
		||||
    request:
 | 
			
		||||
      url: "{server_url}"
 | 
			
		||||
      data:
 | 
			
		||||
        serviceCode: "*483*46#"
 | 
			
		||||
        sessionId: "{second_metadata_entry_session_id}"
 | 
			
		||||
        phoneNumber: "{second_account_phone_number}"
 | 
			
		||||
        text: "2*{second_account_pin_number}*{second_account_pin_number}*{second_account_given_name}*{second_account_family_name}*2*{second_account_location}*{second_account_product}"
 | 
			
		||||
      headers:
 | 
			
		||||
        content-type: "application/x-www-form-urlencoded"
 | 
			
		||||
      method: POST
 | 
			
		||||
    response:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,6 @@ stages:
 | 
			
		||||
      status_code:
 | 
			
		||||
        - 200
 | 
			
		||||
      headers:
 | 
			
		||||
        Content-Length: '51'
 | 
			
		||||
        Content-Type: "text/plain"
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -170,7 +170,7 @@ stages:
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON {second_account_given_name} {second_account_family_name} {second_account_phone_number} will receive 17.00 {token_symbol} from {first_account_given_name} {first_account_family_name} {first_account_phone_number}.\nPlease enter your PIN to confirm.\n0. Back"
 | 
			
		||||
          expected_response: "CON {second_account_phone_number} will receive 17.00 {token_symbol} from {first_account_phone_number}.\nPlease enter your PIN to confirm.\n0. Back"
 | 
			
		||||
 | 
			
		||||
  - name: Enter transcation amount [second account]
 | 
			
		||||
    request:
 | 
			
		||||
@ -191,7 +191,7 @@ stages:
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON {first_account_given_name} {first_account_family_name} {first_account_phone_number} atapokea 25.00 {token_symbol} kutoka kwa {second_account_given_name} {second_account_family_name} {second_account_phone_number}.\nTafadhali weka nambari yako ya siri kudhibitisha.\n0. Nyuma"
 | 
			
		||||
          expected_response: "CON {first_account_phone_number} atapokea 25.00 {token_symbol} kutoka kwa {second_account_phone_number}.\nTafadhali weka nambari yako ya siri kudhibitisha.\n0. Nyuma"
 | 
			
		||||
 | 
			
		||||
  - name: Pin to authorize transaction [first account]
 | 
			
		||||
    request:
 | 
			
		||||
@ -212,7 +212,7 @@ stages:
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Your request has been sent. {second_account_given_name} {second_account_family_name} {second_account_phone_number} will receive 17.00 {token_symbol} from {first_account_given_name} {first_account_family_name} {first_account_phone_number}.\n00. Back\n99. Exit"
 | 
			
		||||
          expected_response: "CON Your request has been sent. {second_account_phone_number} will receive 17.00 {token_symbol} from {first_account_phone_number}.\n00. Back\n99. Exit"
 | 
			
		||||
 | 
			
		||||
  - name: Pin to authorize transaction [second account]
 | 
			
		||||
    request:
 | 
			
		||||
@ -233,7 +233,7 @@ stages:
 | 
			
		||||
      verify_response_with:
 | 
			
		||||
        function: ext.validator:validate_response
 | 
			
		||||
        extra_kwargs:
 | 
			
		||||
          expected_response: "CON Ombi lako limetumwa. {first_account_given_name} {first_account_family_name} {first_account_phone_number} atapokea 25.00 {token_symbol} kutoka kwa {second_account_given_name} {second_account_family_name} {second_account_phone_number}.\n00. Nyuma\n99. Ondoka"
 | 
			
		||||
          expected_response: "CON Ombi lako limetumwa. {first_account_phone_number} atapokea 25.00 {token_symbol} kutoka kwa {second_account_phone_number}.\n00. Nyuma\n99. Ondoka"
 | 
			
		||||
 | 
			
		||||
  - name: Verify balance changes [first account]
 | 
			
		||||
    delay_before: 10
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@
 | 
			
		||||
  {
 | 
			
		||||
    "trigger": "scan_data",
 | 
			
		||||
    "source": "enter_date_of_birth",
 | 
			
		||||
    "dest": "enter_gender",
 | 
			
		||||
    "dest": "enter_location",
 | 
			
		||||
    "conditions": "cic_ussd.state_machine.logic.validator.is_valid_date",
 | 
			
		||||
    "after": "cic_ussd.state_machine.logic.user.save_metadata_attribute_to_session_data",
 | 
			
		||||
    "unless": "cic_ussd.state_machine.logic.validator.has_cached_user_metadata"
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
  {
 | 
			
		||||
    "trigger": "scan_data",
 | 
			
		||||
    "source": "enter_gender",
 | 
			
		||||
    "dest": "enter_location",
 | 
			
		||||
    "dest": "enter_date_of_birth",
 | 
			
		||||
    "after": "cic_ussd.state_machine.logic.user.save_metadata_attribute_to_session_data",
 | 
			
		||||
    "conditions": "cic_ussd.state_machine.logic.validator.is_valid_gender_selection",
 | 
			
		||||
    "unless": "cic_ussd.state_machine.logic.validator.has_cached_user_metadata"
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@
 | 
			
		||||
  {
 | 
			
		||||
    "trigger": "scan_data",
 | 
			
		||||
    "source": "enter_family_name",
 | 
			
		||||
    "dest": "enter_date_of_birth",
 | 
			
		||||
    "dest": "enter_gender",
 | 
			
		||||
    "after": "cic_ussd.state_machine.logic.user.save_metadata_attribute_to_session_data",
 | 
			
		||||
    "unless": "cic_ussd.state_machine.logic.validator.has_cached_user_metadata"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,7 @@ en:
 | 
			
		||||
      CON My profile
 | 
			
		||||
      1. Edit name
 | 
			
		||||
      2. Edit gender
 | 
			
		||||
      3. Edit Age
 | 
			
		||||
      3. Edit age
 | 
			
		||||
      4. Edit location
 | 
			
		||||
      5. Edit products
 | 
			
		||||
      6. View my profile
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,7 @@ sw:
 | 
			
		||||
      CON Wasifu wangu
 | 
			
		||||
      1. Weka jina
 | 
			
		||||
      2. Weka jinsia
 | 
			
		||||
      3  Weka umri
 | 
			
		||||
      3. Weka umri
 | 
			
		||||
      4. Weka eneo
 | 
			
		||||
      5. Weka bidhaa
 | 
			
		||||
      6. Angalia wasifu wako
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user