diff --git a/RapidFTR-Android/res/layout/signup.xml b/RapidFTR-Android/res/layout/signup.xml index 267108e1..bcc0e1ef 100644 --- a/RapidFTR-Android/res/layout/signup.xml +++ b/RapidFTR-Android/res/layout/signup.xml @@ -43,7 +43,7 @@ - + android:title="@string/synchronize_child"/> + android:title="@string/log_out"/> diff --git a/RapidFTR-Android/res/values-ar/strings.xml b/RapidFTR-Android/res/values-ar/strings.xml index 773eab55..3db8d445 100644 --- a/RapidFTR-Android/res/values-ar/strings.xml +++ b/RapidFTR-Android/res/values-ar/strings.xml @@ -25,6 +25,8 @@ إسم المستخدم ضروري كلمة السر ضرورية + Use at least 6 characters or more for your password + Password should be 6 characters or more المنظمة ضرورية أعد إدخال كلمة السر رابط المخدم ضروري diff --git a/RapidFTR-Android/res/values-es/strings.xml b/RapidFTR-Android/res/values-es/strings.xml index ac560646..a177fdc4 100644 --- a/RapidFTR-Android/res/values-es/strings.xml +++ b/RapidFTR-Android/res/values-es/strings.xml @@ -17,6 +17,8 @@ Username Password + Use at least 6 characters or more for your password + Password should be 6 characters or more URL https://test.rapidftr.com diff --git a/RapidFTR-Android/res/values-fr/strings.xml b/RapidFTR-Android/res/values-fr/strings.xml index cd6e30c5..e84d0fbc 100644 --- a/RapidFTR-Android/res/values-fr/strings.xml +++ b/RapidFTR-Android/res/values-fr/strings.xml @@ -15,6 +15,8 @@ Username Password + Use at least 6 characters or more for your password + Password should be 6 characters or more URL Full name required Full Name diff --git a/RapidFTR-Android/res/values-ru/strings.xml b/RapidFTR-Android/res/values-ru/strings.xml index ac9c38bb..aa8d947f 100644 --- a/RapidFTR-Android/res/values-ru/strings.xml +++ b/RapidFTR-Android/res/values-ru/strings.xml @@ -17,6 +17,8 @@ Username Password + Use at least 6 characters or more for your password + Password should be 6 characters or more URL https://test.rapidftr.com diff --git a/RapidFTR-Android/res/values-zh/strings.xml b/RapidFTR-Android/res/values-zh/strings.xml index fc814962..c7d34422 100644 --- a/RapidFTR-Android/res/values-zh/strings.xml +++ b/RapidFTR-Android/res/values-zh/strings.xml @@ -3,90 +3,123 @@ RapidFTR 登录 - Log Out - Records are still being sychronised. Logging out now will cancel this process, are you sure you want to log out? - You have been logged out successfully. - Change URL - Register Child - View All Children - Search for a Child - Synchronize - New to RapidFTR? - Full name required - Full Name - - Username - Password - URL - - https://test.rapidftr.com - rapidftr - - Username is required - Password is required - Organisation is required - Re-type password - Server URL is required - Password mismatch - - Loading… - Incorrect username or password - Login Successful - Please enter a valid url - Unable to connect to the server, please contact your system administrator + 退出 + 正在同步,退出将终止同步,确实要退出? + 会话失效,请退出重新登录 + + 退出成功 + 更改网址 + 注册孩子 + 查看所有孩子 + 搜索孩子 + 同步 + RapidFTR新用户? + 全称是必需的 + 用户名已使用,请重新选择 + 全称 + + 用户名 + 密码 + 网址 + + + + + 用户名是必需的 + 密码是必需的 + 密码长度应至少6位 + 密码长度必须不小于6个字符 + 组织是必需的 + 重新填写网址 + 服务器网址是必需的 + 密码不匹配 + + 加载… + 用户名或密码不正确 + 登录成功 + 请输入一个合法的网址 + 无法连接到服务器,请联系系统管理员 RapidFTR - New Registration - Saving record - Please fill up at least one field - Saved record successfully - Failed to save record! - - Capture Photo - An error occurred while capturing the photo - View Photo - An error occurred while loading the photo - No photo captured for the record - Unable to delete photo from Gallery. Please go to Gallery and delete it manually - Set as primary photo - - Synchronize All - Cancel Synchronize All - Synchronize This Record - Sync in progress… - Sync successful - Sync failed - Network connection is not available, Please try again later - - An error occurred while performing this operation - An error occurred while fetching record(s), please try again - Submit - Edit - Save - Choose an action - Discard - Cancel - Clear - - Register - View All - Search - Sync error - Step 1 of 3 - Syncing Form Sections… - Step 2 of 3 - Sending records to server… - Step 3 of 3 - Getting records from server… - Sign Up! - Confirm Password - Organisation - URL(Optional) - - Sync complete. - Error in syncing. Try again after some time. - Search record by name/id - Go - No Record Found - - This is an audio upload box + 新注册 + 保存记录 + 请至少填写一个表单 + 保存记录成功 + 保存记录失败! + + 拍照 + 拍照失败 + 预览 + 加载照片出错 + 该记录无照片 + 无法删除照片,请去相册删除 + 设为主要照片 + + + 同步所有 + 取消同步所有 + 同步此条记录 + 正在同步… + 同步成功 + 同步失败 + 网络连接失败,请稍后重试 + + 操作出错 + 获取记录出错,请重试 + 获取会话出错 + 提交 + 编辑 + 保存 + 选择一个动作 + 丢弃 + 取消 + 清除 + + 注册 + 查看所有 + 搜索 + 同步出错 + 步骤1-同步表单… + 步骤2-上传记录… + 步骤3-下载记录… + 注册! + 确认密码 + 组织 + 网址 + + 同步完成 + 同步出错,请稍后再试! + 通过名字或编号搜索 + 搜索 + 无此记录 + + 这是一个语音上传框 + 关于 + + RapidFTR支持如下语言: + 全名: + 用户名: + 密码: + 确认密码: + 组织: + 所有表单必填 + 你已注册,请登录使用 + + 确定 + 开始 + 停止 + 播放 + 请重设密码 + 无法连接到服务器,同步取消 + 无法连接到服务器,请稍后重试 + 无网络,请打开wifi或数据重试 + 同步数据出错,请稍后重试 + 当前密码 + 新密码 + 更改密码 + 密码更改成功 + 无法更改密码,请重试 + 正在同步,更改密码将终止同步,是否继续? diff --git a/RapidFTR-Android/res/values/strings.xml b/RapidFTR-Android/res/values/strings.xml index c7aa0828..25045b2b 100644 --- a/RapidFTR-Android/res/values/strings.xml +++ b/RapidFTR-Android/res/values/strings.xml @@ -27,6 +27,8 @@ Username is required Password is required + Use at least 6 characters or more for your password + Password should be 6 characters or more Organisation is required Re-type password Server URL is required diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java b/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java index 0ef75e6b..15bc02a4 100644 --- a/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java +++ b/RapidFTR-Android/src/main/java/com/rapidftr/activity/RapidFtrActivity.java @@ -22,6 +22,7 @@ import com.rapidftr.RapidFtrApplication; import com.rapidftr.model.User; import com.rapidftr.service.LogOutService; +import com.rapidftr.task.SyncUnverifiedDataAsyncTask; import com.rapidftr.task.SynchronisationAsyncTask; import lombok.Getter; import lombok.Setter; @@ -33,17 +34,20 @@ public abstract class RapidFtrActivity extends FragmentActivity { - public static final String LOGOUT_INTENT_FILTER = "com.rapidftr.LOGOUT_INTENT"; + public static final String LOGOUT_INTENT_FILTER = "com.rapidftr.LOGOUT_INTENT"; - protected @Getter @Setter Menu menu; + protected + @Getter + @Setter + Menu menu; private BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if(!((NetworkInfo) intent.getParcelableExtra(EXTRA_NETWORK_INFO)).isConnected() && getContext().cleanSyncTask()){ - makeToast(R.string.network_down); - } + @Override + public void onReceive(Context context, Intent intent) { + if (!((NetworkInfo) intent.getParcelableExtra(EXTRA_NETWORK_INFO)).isConnected() && getContext().cleanSyncTask()) { + makeToast(R.string.network_down); } + } }; private BroadcastReceiver logoutReceiver = new BroadcastReceiver() { @@ -186,11 +190,15 @@ public boolean onOptionsItemSelected(MenuItem item) { } protected void synchronise() { - if(!this.getContext().isOnline()){ + if (!this.getContext().isOnline()) { makeToast(R.string.connection_off); - } - else{ - SynchronisationAsyncTask task = inject(SynchronisationAsyncTask.class); + } else { + SynchronisationAsyncTask task; + if (getCurrentUser().isVerified()) { + task = inject(SynchronisationAsyncTask.class); + } else { + task = inject(SyncUnverifiedDataAsyncTask.class); + } this.getContext().setSyncTask(task); task.setContext(this); task.execute(); @@ -206,17 +214,17 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiver(networkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); initializeExceptionHandler(); - initializeLogoutHandler(); + initializeLogoutHandler(); } - protected void initializeLogoutHandler() { - if (shouldEnsureLoggedIn()) { - IntentFilter intentFilter = new IntentFilter(LOGOUT_INTENT_FILTER); - registerReceiver(logoutReceiver, intentFilter); - } - } + protected void initializeLogoutHandler() { + if (shouldEnsureLoggedIn()) { + IntentFilter intentFilter = new IntentFilter(LOGOUT_INTENT_FILTER); + registerReceiver(logoutReceiver, intentFilter); + } + } - protected boolean shouldEnsureLoggedIn() { + protected boolean shouldEnsureLoggedIn() { return true; } @@ -229,12 +237,12 @@ protected void onResume() { } @Override - protected void onStop(){ + protected void onStop() { super.onStop(); - try{ + try { unregisterReceiver(networkChangeReceiver); unregisterReceiver(logoutReceiver); - }catch(IllegalArgumentException e){ + } catch (IllegalArgumentException e) { logError(e.getMessage()); } } @@ -282,6 +290,17 @@ protected boolean validateTextFieldNotEmpty(int id, int messageId) { } } + protected boolean validateTextFieldLength(int id, int length, int messageId) { + EditText editText = (EditText) findViewById(id); + String value = getEditText(id); + if (value.length() < length) { + editText.setError(getString(messageId)); + return false; + } else { + return true; + } + } + protected String getEditText(int resId) { CharSequence value = ((EditText) findViewById(resId)).getText(); return value == null ? null : value.toString().trim(); @@ -344,7 +363,7 @@ public void onClick(DialogInterface dialog, int selectedItem) { public void getServerAndSync() { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Enter sync location"); - alert.setMessage("Please enter the the location you wish to synchronise with"); + alert.setMessage("Please enter the location you wish to synchronise with"); final EditText input = new EditText(this); alert.setView(input); @@ -362,8 +381,8 @@ public void onClick(DialogInterface dialog, int whichButton) { }); alert.create().show(); } - - protected BroadcastReceiver getBroadcastReceiver(){ + + protected BroadcastReceiver getBroadcastReceiver() { return networkChangeReceiver; } } diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/activity/SignupActivity.java b/RapidFTR-Android/src/main/java/com/rapidftr/activity/SignupActivity.java index cd6ba4c5..f78ff213 100644 --- a/RapidFTR-Android/src/main/java/com/rapidftr/activity/SignupActivity.java +++ b/RapidFTR-Android/src/main/java/com/rapidftr/activity/SignupActivity.java @@ -23,33 +23,33 @@ protected boolean shouldEnsureLoggedIn() { } public boolean isValid() { - return validatesPresenceOfMandatoryFields() && isPasswordSameAsConfirmPassword(); + return validatesPresenceOfMandatoryFields() && validateTextFieldLength(R.id.password, 6, R.string.password_length_error ) && isPasswordSameAsConfirmPassword(); } public void createUser(View view) throws IOException, GeneralSecurityException { if (isValid()) { - User user = buildUser(); + User user = buildUser(); if (user.exists()) { - EditText editText = (EditText) findViewById(R.id.username); - editText.setError(getString(R.string.username_taken)); - makeToast(getString(R.string.username_taken)); + EditText editText = (EditText) findViewById(R.id.username); + editText.setError(getString(R.string.username_taken)); + makeToast(getString(R.string.username_taken)); } else { - user.save(); - makeToast(getString(R.string.registered) + " "+ getEditText(R.id.username)); - finish(); + user.save(); + makeToast(getString(R.string.registered) + " " + getEditText(R.id.username)); + finish(); } } } - protected User buildUser() { - User user = new User(getEditText(R.id.username)); - user.setVerified(false); - user.setFullName(getEditText(R.id.full_name)); - user.setPassword(getEditText(R.id.password)); - user.setUnauthenticatedPassword(getEditText(R.id.password)); - user.setOrganisation(getEditText(R.id.organisation)); - return user; - } + protected User buildUser() { + User user = new User(getEditText(R.id.username)); + user.setVerified(false); + user.setFullName(getEditText(R.id.full_name)); + user.setPassword(getEditText(R.id.password)); + user.setUnauthenticatedPassword(getEditText(R.id.password)); + user.setOrganisation(getEditText(R.id.organisation)); + return user; + } protected boolean validatesPresenceOfMandatoryFields() { return validateTextFieldNotEmpty(R.id.full_name, R.string.full_name_required) & diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewChildActivity.java b/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewChildActivity.java index a58533a0..96f866d3 100644 --- a/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewChildActivity.java +++ b/RapidFTR-Android/src/main/java/com/rapidftr/activity/ViewChildActivity.java @@ -1,10 +1,13 @@ package com.rapidftr.activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.EditText; import android.widget.Toast; import com.rapidftr.R; import com.rapidftr.RapidFtrApplication; @@ -13,6 +16,9 @@ import com.rapidftr.task.SyncChildTask; import org.json.JSONException; +import static com.google.common.base.Strings.isNullOrEmpty; +import static com.rapidftr.RapidFtrApplication.SERVER_URL_PREF; + public class ViewChildActivity extends BaseChildActivity { @@ -50,9 +56,13 @@ protected void initializeData(Bundle savedInstanceState) throws JSONException { } protected void sync() { - SyncChildTask task = inject(SyncChildTask.class); - task.setActivity(this); - RapidFtrApplication.getApplicationInstance().setAsyncTaskWithDialog((AsyncTaskWithDialog) AsyncTaskWithDialog.wrap(this, task, R.string.sync_progress, R.string.sync_success, R.string.sync_failure).execute(child)); + if (!this.getContext().isOnline()) { + makeToast(R.string.connection_off); + } else { + SyncChildTask task = inject(SyncChildTask.class); + task.setActivity(this); + RapidFtrApplication.getApplicationInstance().setAsyncTaskWithDialog((AsyncTaskWithDialog) AsyncTaskWithDialog.wrap(this, task, R.string.sync_progress, R.string.sync_success, R.string.sync_error).execute(child)); + } } @Override @@ -63,7 +73,6 @@ public boolean onCreateOptionsMenu(Menu menu) { menu.findItem(R.id.synchronize_log).setVisible(true); } if (!getCurrentUser().isVerified()) { - menu.findItem(R.id.synchronize_child).setVisible(false); menu.getItem(4).setVisible(false); } } catch (JSONException e) { @@ -79,7 +88,11 @@ public boolean onOptionsItemSelected(MenuItem item) { startActivity(new Intent(this, ChangePasswordActivity.class)); return true; case R.id.synchronize_child: - sync(); + if (isNullOrEmpty(getCurrentUser().getServerUrl())) { + getServerAndSync(); + } else { + sync(); + } return true; case R.id.synchronize_log: showSyncLog(); @@ -94,6 +107,29 @@ public boolean onOptionsItemSelected(MenuItem item) { return false; } + public void getServerAndSync() { + AlertDialog.Builder alert = new AlertDialog.Builder(this); + alert.setTitle("Enter sync location"); + alert.setMessage("Please enter the location you wish to synchronise with"); + final EditText input = new EditText(this); + alert.setView(input); + + alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + getContext().getSharedPreferences().edit().putString(SERVER_URL_PREF, input.getText().toString()).commit(); + getCurrentUser().setServerUrl(input.getText().toString()); + sync(); + } + }); + alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + finish(); + startActivity(new Intent(getContext(), ViewAllChildrenActivity.class)); + } + }); + alert.create().show(); + } + protected void showSyncLog() { Toast.makeText(this, getText(R.string.temp_sync_error), Toast.LENGTH_LONG).show(); } diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java b/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java index c1c58be9..8b4672fc 100644 --- a/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java +++ b/RapidFTR-Android/src/main/java/com/rapidftr/service/ChildService.java @@ -100,9 +100,9 @@ private void setChildAttributes(Child child) throws JSONException { private void addMultiMediaFilesToTheRequest(Child child) throws JSONException { JSONArray photoKeys = child.optJSONArray(PHOTO_KEYS); JSONArray photoKeysToAdd = new JSONArray(); - if(photoKeys != null){ - for(int i = 0; i< photoKeys.length(); i++){ - if(!photoKeys.optString(i).startsWith("photo-")){ + if (photoKeys != null) { + for (int i = 0; i < photoKeys.length(); i++) { + if (!photoKeys.optString(i).startsWith("photo-")) { photoKeysToAdd.put(photoKeys.optString(i)); } } @@ -141,21 +141,20 @@ public void setPhoto(Child child) throws IOException, JSONException { PhotoCaptureHelper photoCaptureHelper = new PhotoCaptureHelper(context); JSONArray photoKeys = child.optJSONArray("photo_keys"); - if(photoKeys != null){ + if (photoKeys != null) { getPhotoFromServerIfNeeded(child, photoCaptureHelper, photoKeys); } } private void getPhotoFromServerIfNeeded(Child child, PhotoCaptureHelper photoCaptureHelper, JSONArray photoKeys) throws JSONException, IOException { - for(int i = 0; i < photoKeys.length(); i++){ + for (int i = 0; i < photoKeys.length(); i++) { String photoKey = photoKeys.get(i).toString(); try { if (!photoKey.equals("")) { photoCaptureHelper.getFile(photoKey, ".jpg"); } - } - catch (FileNotFoundException e) { + } catch (FileNotFoundException e) { getPhotoFromServer(child, photoCaptureHelper, photoKey); } } diff --git a/RapidFTR-Android/src/main/java/com/rapidftr/task/SyncUnverifiedDataAsyncTask.java b/RapidFTR-Android/src/main/java/com/rapidftr/task/SyncUnverifiedDataAsyncTask.java index 3f4a77d4..63b40dfc 100644 --- a/RapidFTR-Android/src/main/java/com/rapidftr/task/SyncUnverifiedDataAsyncTask.java +++ b/RapidFTR-Android/src/main/java/com/rapidftr/task/SyncUnverifiedDataAsyncTask.java @@ -56,7 +56,6 @@ protected void sync() throws JSONException, IOException, HttpException { RapidFtrApplication application = RapidFtrApplication.getApplicationInstance(); if(response != null && response.optBoolean("verified") && !application.getCurrentUser().isVerified()){ startMigrationTask(response, application); - } getFormSections(); sendChildrenToServer(childRepository.currentUsersUnsyncedRecords()); diff --git a/RapidFTR-Android/src/test/java/com/rapidftr/activity/SignupActivityTest.java b/RapidFTR-Android/src/test/java/com/rapidftr/activity/SignupActivityTest.java index 57a2d9a4..6ee16c0d 100644 --- a/RapidFTR-Android/src/test/java/com/rapidftr/activity/SignupActivityTest.java +++ b/RapidFTR-Android/src/test/java/com/rapidftr/activity/SignupActivityTest.java @@ -24,21 +24,20 @@ public class SignupActivityTest { private SignupActivity signupActivity; @Before - public void setup(){ + public void setup() { signupActivity = new SignupActivity(); signupActivity.onCreate(null); signupActivity = spy(signupActivity); - userName = (EditText)signupActivity.findViewById(R.id.username); - password = (EditText)signupActivity.findViewById(R.id.password); - confirmPassword = (EditText)signupActivity.findViewById(R.id.confirm_password); - organisation = (EditText)signupActivity.findViewById(R.id.organisation); + userName = (EditText) signupActivity.findViewById(R.id.username); + password = (EditText) signupActivity.findViewById(R.id.password); + confirmPassword = (EditText) signupActivity.findViewById(R.id.confirm_password); + organisation = (EditText) signupActivity.findViewById(R.id.organisation); } @Test - public void shouldCheckIfMandatoryFieldsAreFilled() - { - userName = mock(EditText.class); - password = mock(EditText.class); + public void shouldCheckIfMandatoryFieldsAreFilled() { + userName = mock(EditText.class); + password = mock(EditText.class); organisation = mock(EditText.class); confirmPassword = mock(EditText.class); @@ -55,13 +54,26 @@ public void shouldCheckIfMandatoryFieldsAreFilled() } @Test - public void shouldSetErrorMessageIfConfirmPasswordIsNotSameAsPassword(){ - userName = mock(EditText.class); - password = mock(EditText.class); + public void shouldCheckIfPasswordLengthInvalid() throws Exception { + password = mock(EditText.class); + + doReturn(password).when(signupActivity).findViewById(R.id.password); + + doReturn("fake").when(signupActivity).getEditText(R.id.password); + doReturn(true).when(signupActivity).validatesPresenceOfMandatoryFields(); + + assertThat(signupActivity.isValid(), equalTo(false)); + verify(password).setError(signupActivity.getString(R.string.password_length_error)); + } + + @Test + public void shouldSetErrorMessageIfConfirmPasswordIsNotSameAsPassword() { + userName = mock(EditText.class); + password = mock(EditText.class); organisation = mock(EditText.class); confirmPassword = mock(EditText.class); - password.setText("text"); + password.setText("password"); confirmPassword.setText("randomText"); userName.setText("user"); organisation.setText("org"); @@ -69,7 +81,7 @@ public void shouldSetErrorMessageIfConfirmPasswordIsNotSameAsPassword(){ doReturn(userName).when(signupActivity).findViewById(R.id.username); doReturn(confirmPassword).when(signupActivity).findViewById(R.id.confirm_password); doReturn(organisation).when(signupActivity).findViewById(R.id.organisation); - doReturn("text").when(signupActivity).getEditText(R.id.password); + doReturn("password").when(signupActivity).getEditText(R.id.password); doReturn("confirmText").when(signupActivity).getEditText(R.id.confirm_password); doReturn(true).when(signupActivity).validatesPresenceOfMandatoryFields(); @@ -79,46 +91,46 @@ public void shouldSetErrorMessageIfConfirmPasswordIsNotSameAsPassword(){ @Test public void shouldSaveUserDetailsInSharedPreferences() throws Exception { - User user = spy(createUser()); - doNothing().when(user).save(); - doReturn(user).when(signupActivity).buildUser(); - doReturn(true).when(signupActivity).isValid(); + User user = spy(createUser()); + doNothing().when(user).save(); + doReturn(user).when(signupActivity).buildUser(); + doReturn(true).when(signupActivity).isValid(); signupActivity.createUser(null); - verify(user).save(); + verify(user).save(); } @Test public void shouldCloseWhenUserDetailsAreCorrect() throws Exception { - fillUpFields(); + fillUpFields(); signupActivity.createUser(null); - verify(signupActivity).finish(); + verify(signupActivity).finish(); } @Test public void shouldShowToastAfterRedirectedToLoginPage() throws Exception { - fillUpFields(); + fillUpFields(); signupActivity.createUser(null); - assertThat(ShadowToast.getTextOfLatestToast(), equalTo(signupActivity.getString(R.string.registered)+" username")); + assertThat(ShadowToast.getTextOfLatestToast(), equalTo(signupActivity.getString(R.string.registered) + " username")); } @Test public void shouldCheckIfUsernameIsAlreadyTakenInMobile() throws Exception { - signupActivity.getContext().getSharedPreferences().edit().putString("user_username","{}").commit(); - userName = mock(EditText.class); + signupActivity.getContext().getSharedPreferences().edit().putString("user_username", "{}").commit(); + userName = mock(EditText.class); doReturn(userName).when(signupActivity).findViewById(R.id.username); - fillUpFields(); + fillUpFields(); signupActivity.createUser(null); assertThat(ShadowToast.getTextOfLatestToast(), equalTo(signupActivity.getString(R.string.username_taken))); verify(userName).setError(signupActivity.getString(R.string.username_taken)); } - protected void fillUpFields() { - doReturn("username").when(signupActivity).getEditText(R.id.username); - doReturn("fullname").when(signupActivity).getEditText(R.id.full_name); - doReturn("organisation").when(signupActivity).getEditText(R.id.organisation); - doReturn("text").when(signupActivity).getEditText(R.id.password); - doReturn("text").when(signupActivity).getEditText(R.id.confirm_password); - } + protected void fillUpFields() { + doReturn("username").when(signupActivity).getEditText(R.id.username); + doReturn("fullname").when(signupActivity).getEditText(R.id.full_name); + doReturn("organisation").when(signupActivity).getEditText(R.id.organisation); + doReturn("password").when(signupActivity).getEditText(R.id.password); + doReturn("password").when(signupActivity).getEditText(R.id.confirm_password); + } } diff --git a/RapidFTR-Android/src/test/java/com/rapidftr/activity/ViewChildActivityTest.java b/RapidFTR-Android/src/test/java/com/rapidftr/activity/ViewChildActivityTest.java index 0772bc83..e563f6f8 100644 --- a/RapidFTR-Android/src/test/java/com/rapidftr/activity/ViewChildActivityTest.java +++ b/RapidFTR-Android/src/test/java/com/rapidftr/activity/ViewChildActivityTest.java @@ -4,6 +4,7 @@ import android.view.MenuItem; import com.rapidftr.CustomTestRunner; import com.rapidftr.R; +import com.rapidftr.RapidFtrApplication; import com.rapidftr.model.Child; import com.rapidftr.model.User; import com.rapidftr.repository.ChildRepository; @@ -16,10 +17,12 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.stubbing.OngoingStubbing; import java.io.IOException; import java.io.SyncFailedException; +import static com.google.common.base.Strings.isNullOrEmpty; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; @@ -77,6 +80,17 @@ public void shouldCallSyncWhenMenuSelected() { verify(activity).sync(); } + @Test + public void shouldCallGetServerURLWhenMenuSelected() throws Exception { + doNothing().when(activity).getServerAndSync(); + User currentUser = mock(User.class); + doReturn(currentUser).when(activity).getCurrentUser(); + MenuItem item = mock(MenuItem.class); + given(item.getItemId()).willReturn(R.id.synchronize_child); + activity.onOptionsItemSelected(item); + verify(activity).getServerAndSync(); + } + @Test public void shouldShowSyncLogMenuItemAfterSyncFailure(){ Child child = mock(Child.class);