package io.evercam;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.ArrayList;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
public class CameraShareTest {
public final static String TEST_SHARE_MESSAGE = "Java Wrapper Test Message";
@BeforeClass
public static void setUpClass() {
API.URL = TestURL.URL;
}
@Test
public void testCreateAndDeleteShare() throws EvercamException {
//TODO: Use the testing server / remove the commented code
//API.resetUrl();
//Create camera owner and add a camera
RandomUser owner = new RandomUser();
ApiKeyPair ownerKeyPair = API.requestUserKeyPairFromEvercam(owner.getUsername(), owner.getPassword());
Camera ownedCamera = owner.addRandomCamera(true);
//Create user to share camera with
RandomUser sharedUser = new RandomUser();
ApiKeyPair sharedKeyPair = API.requestUserKeyPairFromEvercam(sharedUser.getUsername(), sharedUser.getPassword());
//Owner share the camera
API.setUserKeyPair(ownerKeyPair.getApiKey(), ownerKeyPair.getApiId());
CameraShare.create(ownedCamera.getId(), sharedUser.getUsername(), Right.FULL_RIGHTS, TEST_SHARE_MESSAGE);
//Validate camera is successfully shared
API.setUserKeyPair(sharedKeyPair.getApiKey(), sharedKeyPair.getApiId());
ArrayList<Camera> cameraList = Camera.getAll(sharedUser.getUsername(), true, false);
Camera sharedCamera = Camera.getById(ownedCamera.getId(), false);
assertEquals(2, cameraList.size());
assertEquals(ownedCamera.getId(), sharedCamera.getId());
//Then delete the camera share
boolean cameraDeleted = CameraShare.delete(sharedCamera.getId(), sharedUser.getUsername());
assertTrue(cameraDeleted);
assertEquals(1, Camera.getAll(sharedUser.getUsername(), true, false).size());
//Delete the random users
API.setUserKeyPair(ownerKeyPair.getApiKey(), ownerKeyPair.getApiId());
assertTrue(User.delete(owner.getUsername()));
API.setUserKeyPair(sharedKeyPair.getApiKey(), sharedKeyPair.getApiId());
assertTrue(User.delete(sharedUser.getUsername()));
API.setUserKeyPair(null, null);
//API.URL = TestURL.URL;
}
@Test
public void testGetAndPatchCameraShare() throws EvercamException {
//TODO: Use the testing server / remove the commented code
//API.resetUrl();
//Create camera owner and add a camera
RandomUser owner = new RandomUser();
ApiKeyPair ownerKeyPair = API.requestUserKeyPairFromEvercam(owner.getUsername(), owner.getPassword());
Camera ownedCamera = owner.addRandomCamera(true);
//Create user to share camera with
RandomUser sharedUser1 = new RandomUser();
ApiKeyPair sharedKeyPair1 = API.requestUserKeyPairFromEvercam(sharedUser1.getUsername(), sharedUser1.getPassword());
RandomUser sharedUser2 = new RandomUser();
ApiKeyPair sharedKeyPair2 = API.requestUserKeyPairFromEvercam(sharedUser2.getUsername(), sharedUser2.getPassword());
//Owner share the camera
API.setUserKeyPair(ownerKeyPair.getApiKey(), ownerKeyPair.getApiId());
CameraShare.create(ownedCamera.getId(), sharedUser1.getUsername(), Right.FULL_RIGHTS, TEST_SHARE_MESSAGE);
API.setUserKeyPair(ownerKeyPair.getApiKey(), ownerKeyPair.getApiId());
CameraShare.create(ownedCamera.getId(), sharedUser2.getUsername(), Right.FULL_RIGHTS, TEST_SHARE_MESSAGE);
//Test get share by camera
ArrayList<CameraShare> shareListByCamera = CameraShare.getByCamera(ownedCamera.getId());
assertEquals(2, shareListByCamera.size());
//Test get specific share by user and camera and test share object details
CameraShare share = CameraShare.get(ownedCamera.getId(), sharedUser1.getUsername());
assertNotNull(share);
assertEquals(ownedCamera.getId(), share.getCameraId());
assertEquals(owner.getUsername(), share.getSharerId());
assertEquals(owner.getUser().getFullName(), share.getSharerFullName());
assertEquals(owner.getEmail(), share.getSharerEmail());
assertEquals(sharedUser1.getUsername(), share.getUserId());
assertEquals(sharedUser1.getEmail(), share.getUserEmail());
assertEquals(sharedUser1.getUser().getFullName(), share.getFullName());
assertTrue(share.getRights().canEdit());
assertEquals("private", share.getKind());
//Test get owner details from camera share
CameraShareOwner shareOwner = share.getOwner();
assertEquals(owner.getUsername(), shareOwner.getUsername());
assertEquals(owner.getEmail(), shareOwner.getEmail());
assertEquals(owner.getFullName(), shareOwner.getFullName());
//Test for patch camera share
CameraShare patchedShare = CameraShare.patch(ownedCamera.getId(), sharedUser1.getUsername(), Right.READ_ONLY);
assertEquals(Right.READ_ONLY.toLowerCase(), patchedShare.getRights().toString().toLowerCase());
//Test patch share with Email address
CameraShare patchedShareWithEmail = CameraShare.patch(ownedCamera.getId(), sharedUser1.getEmail(),
Right.FULL_RIGHTS);
assertEquals(Right.FULL_RIGHTS.toLowerCase(), patchedShareWithEmail.getRights().toString().toLowerCase());
//Test transfer owner
Camera transferredCameraByUsername = Camera.transfer(ownedCamera.getId(), sharedUser1.getUsername());
assertEquals(sharedUser1.getUsername(), transferredCameraByUsername.getOwner());
API.setUserKeyPair(sharedKeyPair1.getApiKey(), sharedKeyPair1.getApiId());
Camera transferredCameraByEmail = Camera.transfer(ownedCamera.getId(), sharedUser2.getUsername());
assertEquals(sharedUser2.getUsername(), transferredCameraByEmail.getOwner());
//Delete the random users
API.setUserKeyPair(ownerKeyPair.getApiKey(), ownerKeyPair.getApiId());
assertTrue(User.delete(owner.getUsername()));
API.setUserKeyPair(sharedKeyPair1.getApiKey(), sharedKeyPair1.getApiId());
assertTrue(User.delete(sharedUser1.getUsername()));
API.setUserKeyPair(sharedKeyPair2.getApiKey(), sharedKeyPair2.getApiId());
assertTrue(User.delete(sharedUser2.getUsername()));
API.setUserKeyPair(null, null);
//API.URL = TestURL.URL;
}
@AfterClass
public static void destroyClass() {
}
}