fixed bugs where labels would dissappear
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
This commit is contained in:
committed by
Julius Härtl
parent
4d5353b8d4
commit
94e1b86eaf
@@ -20,7 +20,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
import app from '../app/App.js';
|
import app from '../app/App.js';
|
||||||
|
|
||||||
/** global: oc_defaults */
|
/** global: oc_defaults */
|
||||||
app.factory('ApiService', function ($http, $q) {
|
app.factory('ApiService', function ($http, $q) {
|
||||||
var ApiService = function (http, endpoint) {
|
var ApiService = function (http, endpoint) {
|
||||||
@@ -68,6 +67,10 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
$http.get(this.generateUrl(scopeId + '/' + this.endpoint + '/deleted')).then(function (response) {
|
$http.get(this.generateUrl(scopeId + '/' + this.endpoint + '/deleted')).then(function (response) {
|
||||||
var objects = response.data;
|
var objects = response.data;
|
||||||
objects.forEach(function (obj) {
|
objects.forEach(function (obj) {
|
||||||
|
if(self.deleted[obj.id] !== undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self.deleted[obj.id] = obj;
|
self.deleted[obj.id] = obj;
|
||||||
|
|
||||||
if(self.afterFetch !== undefined) {
|
if(self.afterFetch !== undefined) {
|
||||||
@@ -139,7 +142,13 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
|
|
||||||
$http.delete(this.baseUrl + '/' + id).then(function (response) {
|
$http.delete(this.baseUrl + '/' + id).then(function (response) {
|
||||||
self.deleted[id] = self.data[id];
|
self.deleted[id] = self.data[id];
|
||||||
self.remove(id);
|
delete self.data[id];
|
||||||
|
|
||||||
|
let deletedAt = response.data.deletedAt
|
||||||
|
if (deletedAt !== undefined) {
|
||||||
|
self.deleted[id].deletedAt = deletedAt;
|
||||||
|
}
|
||||||
|
|
||||||
deferred.resolve(response.data);
|
deferred.resolve(response.data);
|
||||||
|
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
@@ -154,9 +163,9 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
|
|
||||||
var promise = this.update(entity);
|
var promise = this.update(entity);
|
||||||
|
|
||||||
promise.then(function() {
|
promise.then(() => {
|
||||||
self.data[entity.id] = entity;
|
self.data[entity.id] = entity;
|
||||||
self.remove(entity.id, 'deleted');
|
delete this.deleted[entity.id];
|
||||||
});
|
});
|
||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
@@ -166,6 +175,7 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
ApiService.prototype.clear = function () {
|
ApiService.prototype.clear = function () {
|
||||||
this.data = {};
|
this.data = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
ApiService.prototype.add = function (entity) {
|
ApiService.prototype.add = function (entity) {
|
||||||
var element = this.data[entity.id];
|
var element = this.data[entity.id];
|
||||||
if (element === undefined) {
|
if (element === undefined) {
|
||||||
@@ -179,11 +189,7 @@ app.factory('ApiService', function ($http, $q) {
|
|||||||
element.status = {};
|
element.status = {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ApiService.prototype.remove = function (id, collection = 'data') {
|
|
||||||
if (this[collection][id] !== undefined) {
|
|
||||||
delete this[collection][id];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ApiService.prototype.addAll = function (entities) {
|
ApiService.prototype.addAll = function (entities) {
|
||||||
var self = this;
|
var self = this;
|
||||||
angular.forEach(entities, function (entity) {
|
angular.forEach(entities, function (entity) {
|
||||||
|
|||||||
@@ -54,22 +54,6 @@ class LabelMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
return $this->findEntities($sql, [$boardId], $limit, $offset);
|
return $this->findEntities($sql, [$boardId], $limit, $offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function liveOrMemoizedLabelsForBoardId($boardId) {
|
|
||||||
if(is_null($boardId)) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!isset($this->memoizedLabelsByBoardId)) {
|
|
||||||
$this->memoizedLabelsByBoardId = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!array_key_exists($boardId, $this->memoizedLabelsByBoardId)) {
|
|
||||||
$this->memoizedLabelsByBoardId[$boardId] = $this->getAssignedLabelsForBoard($boardId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->memoizedLabelsByBoardId[$boardId];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAssignedLabelsForBoard($boardId) {
|
public function getAssignedLabelsForBoard($boardId) {
|
||||||
$labels = $this->findAssignedLabelsForBoard($boardId);
|
$labels = $this->findAssignedLabelsForBoard($boardId);
|
||||||
$result = array();
|
$result = array();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use OCA\Deck\Db\Acl;
|
|||||||
use OCA\Deck\Db\StackMapper;
|
use OCA\Deck\Db\StackMapper;
|
||||||
use OCA\Deck\Notification\NotificationHelper;
|
use OCA\Deck\Notification\NotificationHelper;
|
||||||
use OCA\Deck\Db\BoardMapper;
|
use OCA\Deck\Db\BoardMapper;
|
||||||
|
use OCA\Deck\Db\LabelMapper;
|
||||||
use OCA\Deck\NotFoundException;
|
use OCA\Deck\NotFoundException;
|
||||||
use OCA\Deck\StatusException;
|
use OCA\Deck\StatusException;
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ class CardService {
|
|||||||
private $cardMapper;
|
private $cardMapper;
|
||||||
private $stackMapper;
|
private $stackMapper;
|
||||||
private $boardMapper;
|
private $boardMapper;
|
||||||
|
private $labelMapper;
|
||||||
private $permissionService;
|
private $permissionService;
|
||||||
private $boardService;
|
private $boardService;
|
||||||
private $notificationHelper;
|
private $notificationHelper;
|
||||||
@@ -51,6 +53,7 @@ class CardService {
|
|||||||
CardMapper $cardMapper,
|
CardMapper $cardMapper,
|
||||||
StackMapper $stackMapper,
|
StackMapper $stackMapper,
|
||||||
BoardMapper $boardMapper,
|
BoardMapper $boardMapper,
|
||||||
|
LabelMapper $labelMapper,
|
||||||
PermissionService $permissionService,
|
PermissionService $permissionService,
|
||||||
BoardService $boardService,
|
BoardService $boardService,
|
||||||
NotificationHelper $notificationHelper,
|
NotificationHelper $notificationHelper,
|
||||||
@@ -61,6 +64,7 @@ class CardService {
|
|||||||
$this->cardMapper = $cardMapper;
|
$this->cardMapper = $cardMapper;
|
||||||
$this->stackMapper = $stackMapper;
|
$this->stackMapper = $stackMapper;
|
||||||
$this->boardMapper = $boardMapper;
|
$this->boardMapper = $boardMapper;
|
||||||
|
$this->labelMapper = $labelMapper;
|
||||||
$this->permissionService = $permissionService;
|
$this->permissionService = $permissionService;
|
||||||
$this->boardService = $boardService;
|
$this->boardService = $boardService;
|
||||||
$this->notificationHelper = $notificationHelper;
|
$this->notificationHelper = $notificationHelper;
|
||||||
@@ -69,9 +73,20 @@ class CardService {
|
|||||||
$this->currentUser = $userId;
|
$this->currentUser = $userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function enrich($card) {
|
||||||
|
$cardId = $card->getId();
|
||||||
|
$card->setAssignedUsers($this->assignedUsersMapper->find($cardId));
|
||||||
|
$card->setLabels($this->labelMapper->findAssignedLabelsForCard($cardId));
|
||||||
|
$card->setAttachmentCount($this->attachmentService->count($cardId));
|
||||||
|
}
|
||||||
|
|
||||||
public function fetchDeleted($boardId) {
|
public function fetchDeleted($boardId) {
|
||||||
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
||||||
return $this->cardMapper->findDeleted($boardId);
|
$cards = $this->cardMapper->findDeleted($boardId);
|
||||||
|
foreach ($cards as $card) {
|
||||||
|
$this->enrich($card);
|
||||||
|
}
|
||||||
|
return $cards;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function find($cardId) {
|
public function find($cardId) {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class StackService {
|
|||||||
private $labelMapper;
|
private $labelMapper;
|
||||||
private $permissionService;
|
private $permissionService;
|
||||||
private $boardService;
|
private $boardService;
|
||||||
|
private $cardService;
|
||||||
private $assignedUsersMapper;
|
private $assignedUsersMapper;
|
||||||
private $attachmentService;
|
private $attachmentService;
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ class StackService {
|
|||||||
LabelMapper $labelMapper,
|
LabelMapper $labelMapper,
|
||||||
PermissionService $permissionService,
|
PermissionService $permissionService,
|
||||||
BoardService $boardService,
|
BoardService $boardService,
|
||||||
|
CardService $cardService,
|
||||||
AssignedUsersMapper $assignedUsersMapper,
|
AssignedUsersMapper $assignedUsersMapper,
|
||||||
AttachmentService $attachmentService
|
AttachmentService $attachmentService
|
||||||
) {
|
) {
|
||||||
@@ -62,6 +64,7 @@ class StackService {
|
|||||||
$this->labelMapper = $labelMapper;
|
$this->labelMapper = $labelMapper;
|
||||||
$this->permissionService = $permissionService;
|
$this->permissionService = $permissionService;
|
||||||
$this->boardService = $boardService;
|
$this->boardService = $boardService;
|
||||||
|
$this->cardService = $cardService;
|
||||||
$this->assignedUsersMapper = $assignedUsersMapper;
|
$this->assignedUsersMapper = $assignedUsersMapper;
|
||||||
$this->attachmentService = $attachmentService;
|
$this->attachmentService = $attachmentService;
|
||||||
}
|
}
|
||||||
@@ -73,14 +76,8 @@ class StackService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$labels = $this->labelMapper->liveOrMemoizedLabelsForBoardId($stack->getBoardId());
|
foreach ($cards as $card) {
|
||||||
foreach ($cards as $cardIndex => $card) {
|
$this->cardService->enrich($card);
|
||||||
$assignedUsers = $this->assignedUsersMapper->find($card->getId());
|
|
||||||
$card->setAssignedUsers($assignedUsers);
|
|
||||||
if (array_key_exists($card->id, $labels)) {
|
|
||||||
$cards[$cardIndex]->setLabels($labels[$card->id]);
|
|
||||||
}
|
|
||||||
$card->setAttachmentCount($this->attachmentService->count($card->getId()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$stack->setCards($cards);
|
$stack->setCards($cards);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use OCA\Deck\Db\Card;
|
|||||||
use OCA\Deck\Db\CardMapper;
|
use OCA\Deck\Db\CardMapper;
|
||||||
use OCA\Deck\Db\StackMapper;
|
use OCA\Deck\Db\StackMapper;
|
||||||
use OCA\Deck\Db\BoardMapper;
|
use OCA\Deck\Db\BoardMapper;
|
||||||
|
use OCA\Deck\Db\LabelMapper;
|
||||||
use OCA\Deck\NotFoundException;
|
use OCA\Deck\NotFoundException;
|
||||||
use OCA\Deck\Notification\NotificationHelper;
|
use OCA\Deck\Notification\NotificationHelper;
|
||||||
use OCA\Deck\StatusException;
|
use OCA\Deck\StatusException;
|
||||||
@@ -51,18 +52,34 @@ class CardServiceTest extends TestCase {
|
|||||||
private $assignedUsersMapper;
|
private $assignedUsersMapper;
|
||||||
/** @var BoardService|\PHPUnit\Framework\MockObject\MockObject */
|
/** @var BoardService|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
private $boardService;
|
private $boardService;
|
||||||
|
/** @var LabelMapper|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
|
private $labelMapper;
|
||||||
|
private $boardMapper;
|
||||||
|
private $attachmentService;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->cardMapper = $this->createMock(CardMapper::class);
|
$this->cardMapper = $this->createMock(CardMapper::class);
|
||||||
$this->stackMapper = $this->createMock(StackMapper::class);
|
$this->stackMapper = $this->createMock(StackMapper::class);
|
||||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||||
|
$this->labelMapper = $this->createMock(LabelMapper::class);
|
||||||
$this->permissionService = $this->createMock(PermissionService::class);
|
$this->permissionService = $this->createMock(PermissionService::class);
|
||||||
$this->boardService = $this->createMock(BoardService::class);
|
$this->boardService = $this->createMock(BoardService::class);
|
||||||
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
||||||
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
|
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
|
||||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||||
$this->cardService = new CardService($this->cardMapper, $this->stackMapper, $this->boardMapper, $this->permissionService, $this->boardService, $this->notificationHelper, $this->assignedUsersMapper, $this->attachmentService, 'userXY');
|
$this->cardService = new CardService(
|
||||||
|
$this->cardMapper,
|
||||||
|
$this->stackMapper,
|
||||||
|
$this->boardMapper,
|
||||||
|
$this->labelMapper,
|
||||||
|
$this->permissionService,
|
||||||
|
$this->boardService,
|
||||||
|
$this->notificationHelper,
|
||||||
|
$this->assignedUsersMapper,
|
||||||
|
$this->attachmentService,
|
||||||
|
'user1'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFind() {
|
public function testFind() {
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ class StackServiceTest extends TestCase {
|
|||||||
private $attachmentService;
|
private $attachmentService;
|
||||||
/** @var BoardService|\PHPUnit\Framework\MockObject\MockObject */
|
/** @var BoardService|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
private $boardService;
|
private $boardService;
|
||||||
|
/** @var CardService|\PHPUnit\Framework\MockObject\MockObject */
|
||||||
|
private $cardService;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
@@ -69,13 +71,10 @@ class StackServiceTest extends TestCase {
|
|||||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||||
$this->permissionService = $this->createMock(PermissionService::class);
|
$this->permissionService = $this->createMock(PermissionService::class);
|
||||||
$this->boardService = $this->createMock(BoardService::class);
|
$this->boardService = $this->createMock(BoardService::class);
|
||||||
|
$this->cardService = $this->createMock(CardService::class);
|
||||||
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
|
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
|
||||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||||
|
$this->labelMapper = $this->createMock(LabelMapper::class);
|
||||||
$this->labelMapper = $this->getMockBuilder(LabelMapper::class)
|
|
||||||
->setMethodsExcept(['liveOrMemoizedLabelsForBoardId'])
|
|
||||||
->disableOriginalConstructor()
|
|
||||||
->getMock();
|
|
||||||
|
|
||||||
$this->stackService = new StackService(
|
$this->stackService = new StackService(
|
||||||
$this->stackMapper,
|
$this->stackMapper,
|
||||||
@@ -85,6 +84,7 @@ class StackServiceTest extends TestCase {
|
|||||||
|
|
||||||
$this->permissionService,
|
$this->permissionService,
|
||||||
$this->boardService,
|
$this->boardService,
|
||||||
|
$this->cardService,
|
||||||
$this->assignedUsersMapper,
|
$this->assignedUsersMapper,
|
||||||
$this->attachmentService
|
$this->attachmentService
|
||||||
);
|
);
|
||||||
@@ -93,9 +93,16 @@ class StackServiceTest extends TestCase {
|
|||||||
public function testFindAll() {
|
public function testFindAll() {
|
||||||
$this->permissionService->expects($this->once())->method('checkPermission');
|
$this->permissionService->expects($this->once())->method('checkPermission');
|
||||||
$this->stackMapper->expects($this->once())->method('findAll')->willReturn($this->getStacks());
|
$this->stackMapper->expects($this->once())->method('findAll')->willReturn($this->getStacks());
|
||||||
$this->labelMapper->expects($this->once())->method('getAssignedLabelsForBoard')->willReturn($this->getLabels());
|
$this->cardService->expects($this->atLeastOnce())->method('enrich')->will(
|
||||||
|
$this->returnCallback(
|
||||||
|
function($card) {
|
||||||
|
$card->setLabels($this->getLabels()[$card->getId()]);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
$this->cardMapper->expects($this->any())->method('findAll')->willReturn($this->getCards(222));
|
$this->cardMapper->expects($this->any())->method('findAll')->willReturn($this->getCards(222));
|
||||||
|
|
||||||
|
|
||||||
$actual = $this->stackService->findAll(123);
|
$actual = $this->stackService->findAll(123);
|
||||||
for($stackId=0; $stackId<3; $stackId++) {
|
for($stackId=0; $stackId<3; $stackId++) {
|
||||||
for ($cardId=0;$cardId<10;$cardId++) {
|
for ($cardId=0;$cardId<10;$cardId++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user