diff --git a/apps/roster/include/roster.hrl b/apps/roster/include/roster.hrl index f1946489f7f868160b1c975efc4f9c370badbce8..435a06db99f3b1a3212e1ab34644c5aef8593449 100644 --- a/apps/roster/include/roster.hrl +++ b/apps/roster/include/roster.hrl @@ -138,14 +138,14 @@ mentioned = [] :: [] | list(integer()), status = [] :: [] | async | delete | clear| update | edit}). --record('Link', {entity_id = [] :: [] | binary(), %% Room id etc - name = [] :: [] | binary(), %% actually the link - type = [] :: [] | group | channel, - status = [] :: [] | get | join | update | delete }). +-record('Link', {id = [] :: [] | binary(), %% actually the link + name = [] :: [] | binary(), %% Room id etc + type = [] :: [] | group | channel, + status = [] :: [] | get | join | update | delete }). -record('Room', {id = [] :: [] | binary(), name = [] :: [] | binary(), - links = [] :: [] | binary() | list(#'Link'{}) , + links = [] :: [] | list(#'Link'{}), description = [] :: [] | binary(), settings = [] :: list(#'Feature'{}), members = [] :: list(#'Member'{}), diff --git a/apps/roster/priv/macbert/Model/Link.swift b/apps/roster/priv/macbert/Model/Link.swift index 6f9fc0aa22ccb39858b0ee4398b3a2474d32984c..e7798fa21e331d30ce5604d893f08da6ad35bded 100644 --- a/apps/roster/priv/macbert/Model/Link.swift +++ b/apps/roster/priv/macbert/Model/Link.swift @@ -1,6 +1,6 @@ class Link { - var entity_id: String? + var id: String? var name: String? var type: AnyObject? var status: AnyObject? diff --git a/apps/roster/priv/macbert/Model/Room.swift b/apps/roster/priv/macbert/Model/Room.swift index 0903cd57c84989dc88cb3cdb9829737607f7a564..5ecb7eed3c4b2c55580607e6e00104023a763bdd 100644 --- a/apps/roster/priv/macbert/Model/Room.swift +++ b/apps/roster/priv/macbert/Model/Room.swift @@ -2,7 +2,7 @@ class Room { var id: String? var name: String? - var links: String? + var links: [Link]? var description: String? var settings: [Feature]? var members: [Member]? diff --git a/apps/roster/priv/macbert/Source/Decoder.swift b/apps/roster/priv/macbert/Source/Decoder.swift index 41e5f0d6dffc5c504275924ea2e6e026d025b16b..d0eb85fdeddd770a9a37511594928440c6d72874 100644 --- a/apps/roster/priv/macbert/Source/Decoder.swift +++ b/apps/roster/priv/macbert/Source/Decoder.swift @@ -372,7 +372,7 @@ func parseObject(name: String, body:[Model], tuple: BertTuple) -> AnyObject? case "Link": if body.count != 4 { return nil } let a_Link = Link() - a_Link.entity_id = body[0].parse(bert: tuple.elements[1]) as? String + a_Link.id = body[0].parse(bert: tuple.elements[1]) as? String a_Link.name = body[1].parse(bert: tuple.elements[2]) as? String a_Link.type = body[2].parse(bert: tuple.elements[3]) as? AnyObject a_Link.status = body[3].parse(bert: tuple.elements[4]) as? AnyObject @@ -382,7 +382,7 @@ func parseObject(name: String, body:[Model], tuple: BertTuple) -> AnyObject? let a_Room = Room() a_Room.id = body[0].parse(bert: tuple.elements[1]) as? String a_Room.name = body[1].parse(bert: tuple.elements[2]) as? String - a_Room.links = body[2].parse(bert: tuple.elements[3]) as? String + a_Room.links = body[2].parse(bert: tuple.elements[3]) as? [Link] a_Room.description = body[3].parse(bert: tuple.elements[4]) as? String a_Room.settings = body[4].parse(bert: tuple.elements[5]) as? [Feature] a_Room.members = body[5].parse(bert: tuple.elements[6]) as? [Member] diff --git a/apps/roster/priv/macbert/Spec/Room_Spec.swift b/apps/roster/priv/macbert/Spec/Room_Spec.swift index 7b4a2d357380abde789de544b28f33ea4b80c28a..2bc7347cecb1a4d6c50186e41d5d89a0337489cd 100644 --- a/apps/roster/priv/macbert/Spec/Room_Spec.swift +++ b/apps/roster/priv/macbert/Spec/Room_Spec.swift @@ -8,7 +8,7 @@ func get_Room() -> Model { Model(value:Binary())])), Model(value:Chain(types:[ Model(value:List(constant:"")), - Model(value:Binary())])), + Model(value:List(constant:nil,model:get_Link()))])), Model(value:Chain(types:[ Model(value:List(constant:"")), Model(value:Binary())])), diff --git a/apps/roster/priv/macbert/json-bert.js b/apps/roster/priv/macbert/json-bert.js index dc0d59f1b69835717da86e2f41b2c216d41440d0..1d7a3225a95205a66056e02727ecf069cc247096 100644 --- a/apps/roster/priv/macbert/json-bert.js +++ b/apps/roster/priv/macbert/json-bert.js @@ -1054,16 +1054,16 @@ function decMessage(d) { function encLink(d) { var tup = atom('Link'); - var entity_id = 'entity_id' in d && d.entity_id ? bin(d.entity_id) : nil(); + var id = 'id' in d && d.id ? bin(d.id) : nil(); var name = 'name' in d && d.name ? bin(d.name) : nil(); var type = 'type' in d && d.type ? atom(d.type) : nil(); var status = 'status' in d && d.status ? atom(d.status) : nil(); - return tuple(tup,entity_id,name,type,status); } + return tuple(tup,id,name,type,status); } function lenLink() { return 5; } function decLink(d) { var r={}; r.tup = 'Link'; - r.entity_id = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; + r.id = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; r.name = d && d.v[2] ? utf8_arr(d.v[2].v) : undefined; r.type = d && d.v[3] ? decode(d.v[3]) : undefined; r.status = d && d.v[4] ? decode(d.v[4]) : undefined; @@ -1073,7 +1073,10 @@ function encRoom(d) { var tup = atom('Room'); var id = 'id' in d && d.id ? bin(d.id) : nil(); var name = 'name' in d && d.name ? bin(d.name) : nil(); - var links = 'links' in d && d.links ? bin(d.links) : nil(); + var links = []; if ('links' in d && d.links) + { d.links.forEach(function(x){ + links.push(encode(x))}); + links={t:108,v:links}; } else { links = nil() }; var description = 'description' in d && d.description ? bin(d.description) : nil(); var settings = []; if ('settings' in d && d.settings) { d.settings.forEach(function(x){ @@ -1115,7 +1118,10 @@ function decRoom(d) { var r={}; r.tup = 'Room'; r.id = d && d.v[1] ? utf8_arr(d.v[1].v) : undefined; r.name = d && d.v[2] ? utf8_arr(d.v[2].v) : undefined; - r.links = d && d.v[3] ? utf8_arr(d.v[3].v) : undefined; + r.links = []; + (d && d.v[3] && d.v[3].v) ? + d.v[3].v.forEach(function(x){r.links.push(decode(x))}) : + r.links = undefined; r.description = d && d.v[4] ? utf8_arr(d.v[4].v) : undefined; r.settings = []; (d && d.v[5] && d.v[5].v) ? diff --git a/apps/roster/src/protocol/roster_link.erl b/apps/roster/src/protocol/roster_link.erl index 8caddef2ef54abf8e4d9a441bc009ce80d842b0b..0ba31b4ebdd0bfa31cffa7088f6a8165defa79dc 100644 --- a/apps/roster/src/protocol/roster_link.erl +++ b/apps/roster/src/protocol/roster_link.erl @@ -6,12 +6,12 @@ -include_lib("n2o/include/n2o.hrl"). -compile(export_all). -info(#'Link'{status = join = LStatus, type = group, name = LinkId} = RequestData, +info(#'Link'{id = LinkId, type = group, status = join = LStatus} = RequestData, Req, #cx{params = ClientId} = State) when LinkId /= [] -> roster:info(?MODULE, "~p:Link/~p:~p", [ClientId, LStatus, RequestData]), - Res = case kvs:index('Room', links, LinkId) of - [#'Room'{id = RoomId} = Room] -> - #'Member'{id = MemberId, reader = MemberReader} = +Res = case get_room_by_link_Id(LinkId) of + #ok{code = #'Room'{id = RoomId} = Room}-> + #'Member'{id = MemberId, reader = MemberReader} = Member = case roster:muc_member(ClientId, RoomId) of #'Member'{} = M -> M; _ -> @@ -34,48 +34,38 @@ info(#'Link'{status = join = LStatus, type = group, name = LinkId} = RequestData roster:add_member(Room, Member, {no_muc_message, Room#'Room'.readers}), {As, Ms} = roster:split_members(roster:members(#muc{name = Room1#'Room'.id}, presence)), roster:reader_cache(Room1#'Room'{status = join, last_msg = LastMsg, unread = UnreadMsg, members = Ms, admins = As}); - _ -> - io_error_code(room_not_found) - end, + #error{code = not_found} = Err -> Err + end, roster:info(?MODULE, "Link/~p.Response:~p", [Res, LStatus]), {reply, {bert, Res}, Req, State}; -info(#'Link'{status = update = LStatus, name = LinkId, type = group, entity_id = RoomId} = RequestData, +info(#'Link'{id = LinkId, name = RoomId, type = group, status = update = LStatus} = RequestData, Req, #cx{params = ClientId} = State) when RoomId /= [], LinkId /= [] -> roster:info(?MODULE, "~p:Link/~p:~p", [ClientId, LStatus, RequestData]), - Res = case {kvs:index('Room', links, LinkId), roster:muc_member(ClientId, RoomId)} of - {[#'Room'{id = RoomId, links = LinkId}], #'Member'{status = admin}} -> - update_link('Room', RoomId, RequestData); - {[#'Room'{id = RoomId, links = LinkId}], #'Member'{}} -> - io_error_code(permission_denied); - {_, _} -> - io_error_code(invalide_data) + Res = case roster:muc_member(ClientId, RoomId) of + #'Member'{status = admin} = M-> + update_link(RoomId, RequestData); + #'Member'{status = member} -> + error_code(permission_denied); + _-> + error_code(invalide_data) end, roster:info(?MODULE, "Link/~p.Response:~p", [Res, LStatus]), {reply, {bert, Res}, Req, State}; -info(#'Link'{status = get = LStatus, type = Type, name = LinkId} = RequestData, +info(#'Link'{id = LinkId, type = group, status = get = LStatus} = RequestData, Req, #cx{params = ClientId} = State) when LinkId /= [] -> roster:info(?MODULE, "~p:Link/~p:~p", [ClientId, LStatus, RequestData]), - Res = case kvs:index('Room', links, LinkId) of - [#'Room'{links = LinkId} = Room] -> Room#'Room'{status = info}; - [] -> io_error_code(room_not_found) - end, + Res = case get_room_by_link_Id(LinkId) of + #ok{code = #'Room'{id = RoomId} = Room } -> #ok{code = Room#'Room'{status = info}}; + #error{code = not_found} = Err -> Err + end, roster:info(?MODULE, "Link/~p.Response:~p", [Res, LStatus]), {reply, {bert, Res}, Req, State}; -info(#'Link'{status = delete = LStatus, name = LinkId, type = group, entity_id = RoomId} = RequestData, - Req, #cx{params = ClientId} = State) when RoomId /= [], LinkId /= [] -> +info(#'Link'{status = delete = LStatus} = RequestData, Req, #cx{params = ClientId} = State) -> roster:info(?MODULE, "~p:Link/~p:~p", [ClientId, LStatus, RequestData]), - Res = case {kvs:index('Room', links, LinkId), roster:muc_member(ClientId, RoomId)} of - {[#'Room'{id = RoomId, links = LinkId} = Room], #'Member'{status = admin}} -> - ok = kvs:put(Room#'Room'{links = []}), - RequestData#'Link'{name = []}; - {[#'Room'{id = RoomId, links = LinkId}], #'Member'{}} -> - io_error_code(permission_denied); - {_, _} -> - io_error_code(invalide_data) - end, + Res = error_code(permission_denied), roster:info(?MODULE, "Link/~p.Response:~p", [Res, LStatus]), {reply, {bert, Res}, Req, State}; @@ -83,26 +73,54 @@ info(#'Link'{} = RequestData, Req, #cx{params = ClientId} = State) -> roster:info(?MODULE, "~p:Link/unknown:~p", [ClientId, RequestData]), {reply, {bert, io_error_code(invalid_data)}, Req, State}. -hash(Data) -> - {_, <>} = - roster:gen_token([], Data), Hash. -gen_link(Id) -> - Link = hash(Id), - case kvs:index('Room', links, Link) of - [] -> Link; - _ -> gen_link(Id) - end. +gen_link(RoomId)-> + TmpLinkId = hash(RoomId), + LinkId = case kvs:get('Link', TmpLinkId) of + #ok{code = #'Link'{id = TmpLinkId}}-> gen_link(RoomId); + #error{code = not_found} -> TmpLinkId + end, + +#'Link'{ + % id = <>, + id = LinkId, + name = RoomId, + type = group + }. + +update_link(RoomId, #'Link'{name = LinkId} = Link) -> + Res = case kvs:get('Room', RoomId) of + #ok{code = #'Room'{links = Links0} = Room} -> + NewLink = gen_link(RoomId), + % Links1 = lists:keyreplace(LinkId, #'Link'.id, Links0, NewLink), + ok = kvs:put(Room#'Room'{links = [NewLink]}), + ok = kvs:delete('Link', LinkId), + ok = kvs:put(NewLink), + NewLink; + #error{code = not_found} = Err -> Err + end, + Res. -update_link(T, EId, #'Link'{name = LinkId} = Link) -> - case kvs:get(T, EId) of - #ok{code = #'Room'{links = LinkId} = Room} -> - LinkId0 = gen_link(join_link), - ok = kvs:put(Room#'Room'{links = LinkId0}), - Link#'Link'{name = LinkId0}; - #error{} -> io_error_code(room_not_found) - end. +purge_link(RoomId)-> + [kvs:delete('Link', Lid) || #'Link'{id = Lid,name = RoomId}<- kvs:all('Link')], + ok. -io_error_code(Payload) -> io_code(#error{code = Payload}). -io_ok_code(Payload) -> io_code(#ok{code = Payload}). +hash(Data) -> + {_, <>} = + roster:gen_token([], Data), Hash. +get_room_by_link_Id(<>)-> + get_room_by_link_Id(LinkId); +get_room_by_link_Id(Id) -> + case kvs:get('Link',Id) of + #ok{code = #'Link'{name = RoomId}}-> + case kvs:get('Room',RoomId) of + #ok{code = #'Room'{}} = Ok -> Ok; + #error{code = not_found} = Err -> Err + end; + #error{code = not_found} = Err -> Err + end. +io_error_code(Payload) -> io_code(error_code(Payload)). +io_ok_code(Payload) -> io_code(ok_code(Payload)). io_code(Payload) -> #io{code = Payload}. +error_code(Payload) -> #error{code = Payload}. +ok_code(Payload) -> #ok{code =Payload}. diff --git a/apps/roster/src/protocol/roster_room.erl b/apps/roster/src/protocol/roster_room.erl index 63fc2e1b02951d64cd9fa657b8d09a189db3c27b..e69babdee59807def124156672fa7097798cb6fe 100644 --- a/apps/roster/src/protocol/roster_room.erl +++ b/apps/roster/src/protocol/roster_room.erl @@ -4,6 +4,8 @@ -include_lib("roster/include/static/roster_text.hrl"). -compile(export_all). +-import(roster_link,[gen_link/1]). + -define(MAX_ROOM_LENGTH, 32). -define(MIN_ROOM_LENGTH, 1). @@ -13,7 +15,9 @@ info(#'Room'{status = create, id = Room, admins = [Admin|_]} = R, Req, #cx{state = verified} = State) -> kvs_stream:save(#writer{id = #muc{name = Room}}), roster:subscribe_room(Admin#'Member'{presence = online}), - kvs:put(R#'Room'{status = [], id = Room, members = [], admins = [], links = roster_link:gen_link(join_link),created = roster:now_msec()}), + Link = gen_link(Room), + ok = kvs:put(R#'Room'{status = [], id = Room, links = [Link], members = [], admins = [], created = roster:now_msec()}), + ok = kvs:put(Link), info(R#'Room'{status = add, id = Room}, Req, State#cx{state = create}); info(#'Room'{status = create, id = <>, name = Name, admins = [Owner|TA]= Admins, members = Members, data = Data} = R, Req, #cx{params = ClientId} = State) -> diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index 16762f74c1dade5642ff3e6db5ddd1ff313c8ef6..8efcefd88d27c9a2ef80da24988b140d81875471 100644 --- a/apps/roster/src/roster.erl +++ b/apps/roster/src/roster.erl @@ -92,7 +92,8 @@ tables() -> [ #table{name = chain, container = true, fields = record_info(fields, chain)}, #table{name = writer, fields = record_info(fields, writer)}, #table{name = reader, fields = record_info(fields, reader)}, - #table{name = 'Room', fields = record_info(fields, 'Room'), keys = [links]}, + #table{name = 'Room', fields = record_info(fields, 'Room')}, + #table{name = 'Link', fields = record_info(fields, 'Link')}, #table{name = 'Member', container = chain, fields = record_info(fields, 'Member')}, #table{name = 'Profile', fields = record_info(fields, 'Profile')}, #table{name = 'Index', fields = record_info(fields, 'Index')}, @@ -778,6 +779,7 @@ validate(Payload, ClientId) -> %% MUC API purge_room(false) -> []; purge_room(Room) -> + roster_link:purge_link(Room), [begin kvs:remove('Member', Id), kvs:delete(reader, R), unsubscribe_room(M), remove_rooms(PhoneId, [Room]) end || #'Member'{id = Id, phone_id = PhoneId, reader = R} = M <- members(#muc{name = Room})], kvs:delete(writer, {muc, Room}), delete_msg(#muc{name = Room}), diff --git a/apps/roster/src/roster_validator.erl b/apps/roster/src/roster_validator.erl index 4dbe237f1519768b3c720adb3d07220eed395637..6285b5c53dc771dac438ae55fd135786b2189e4d 100644 --- a/apps/roster/src/roster_validator.erl +++ b/apps/roster/src/roster_validator.erl @@ -494,10 +494,10 @@ validate(D = #'Message'{id = Id, container = Container, feed_id = Feed_id, prev _ -> [{RecField, D}|Acc2] end end, Acc, lists:zip(record_info(fields, 'Message'), tl(tuple_to_list(D)))), ErrFields++case ErrFields of [] -> CustomValidateModule:ValidateFun(D); _ -> [] end; -validate(D = #'Link'{entity_id = Entity_id, name = Name, type = Type, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> +validate(D = #'Link'{id = Id, name = Name, type = Type, status = Status}, Acc, {CustomValidateModule, ValidateFun} = CM) -> ErrFields = lists:foldl(fun ({RecField, F}, Acc2) -> case {RecField, F} of - {entity_id,_} when Entity_id==[] orelse is_binary(Entity_id) -> Acc2; + {id,_} when Id==[] orelse is_binary(Id) -> Acc2; {name,_} when Name==[] orelse is_binary(Name) -> Acc2; {type,_} when Type==[] orelse Type=='group' orelse Type=='channel' -> Acc2; {status,_} when Status==[] orelse Status=='get' orelse Status=='join' orelse Status=='update' orelse Status=='delete' -> Acc2; @@ -509,7 +509,7 @@ validate(D = #'Room'{id = Id, name = Name, links = Links, description = Descript case {RecField, F} of {id,_} when Id==[] orelse is_binary(Id) -> Acc2; {name,_} when Name==[] orelse is_binary(Name) -> Acc2; - {links,_} when Links==[] orelse is_binary(Links) orelse is_list(Links) -> + {links,_} when Links==[] orelse is_list(Links) -> lists:foldl(fun(Tmp, Acc3) when is_record(Tmp,'Link') -> validate(Tmp, Acc3, CM); (Tmp, Acc3) -> [{links, D}|Acc3] end, Acc2, Links); {description,_} when Description==[] orelse is_binary(Description) -> Acc2; {settings,_} when is_list(Settings) -> diff --git a/apps/roster/src/test/room_test.erl b/apps/roster/src/test/room_test.erl index 7d8cd7db1c201f53df187f9fa9a90839674c877b..0b5a3d8dbf2d6df6ea6fdd35d9f3f601125dffbb 100644 --- a/apps/roster/src/test/room_test.erl +++ b/apps/roster/src/test/room_test.erl @@ -125,12 +125,14 @@ link() -> roster_client:send_receive(AClientId, Counter + 1, #'Room'{status = add, id = RoomID, admins = [EM]}), true = is_integer(U), %% Get the room link by RoomId - {ok, #'Room'{links = LinkId}} = kvs:get('Room', Room), + #ok{code = #'Room'{links = [#'Link'{id = LinkId}]}} = kvs:get('Room', Room), %% Assert linkId by Link get request - #'Room'{links = LinkId, readers = [_ | _]} = roster_client:send_receive(AClientId, 1, #'Link'{type = group, status = get, name = LinkId}), + #ok{code = #'Room'{links = [#'Link'{id = LinkId}], readers = [_ | _]}} = +roster_client:send_receive(AClientId, 1, #'Link'{type = group, status = get, id = LinkId}), %% Update the link from the administrator and compare it with the old one. - #'Room'{links = LinkId} =/= - roster_client:send_receive(AClientId, 1, #'Link'{type = group, status = update, name = LinkId, entity_id = Room}), + % #'Room'{links = LinkId} =/= + X = roster_client:send_receive(AClientId, 1, #'Link'{id = LinkId, name = Room, type = group, status = update}), +io:format("~nXXXXXXXXXXXXXXXXXXXXX~p~n",[X]), %%add member with message size roster:purge_user(FPhone = <<"6789000">>), @@ -183,42 +185,40 @@ test_joinlink() -> {[Owner | _], Members} = roster:split_members([M || {_, _, M, _} <- GroupAPCs]), RoomInit = #'Room'{status = create, type = group, id = RoomId, name = RoomName, admins = [Owner#'Member'{alias = <<"Radostin">>}], members = [hd(Members)]}, - #'Room'{id = RoomId, links = LinkId, + #'Room'{id = RoomId, links = [#'Link'{id = LinkId}], admins = [_RoomOwner = #'Member'{phone_id = APhoneId}], members = [#'Member'{phone_id = BPhoneId}]} = roster_client:send_receive(AClientId, GroupACounter, RoomInit), %% Test: get room info with fake room link - roster_link:io_error_code(room_not_found) == - roster_client:send_receive(BClientId, 1, #'Link'{type = group, status = get, name = ?BLANK_LINK}), + roster_link:io_error_code(room_not_found) == roster_client:send_receive(BClientId, 1, #'Link'{id = ?BLANK_LINK, type = group, status = get}), %% Test: get room info with correct room link - kvs:get('Room', RoomId) == #ok{code = roster_client:send_receive(BClientId, 1, #'Link'{type = group, status = get, name = LinkId})}, + kvs:get('Room', RoomId) == #ok{code = roster_client:send_receive(BClientId, 1, #'Link'{id = LinkId, type = group, status = get})}, GroupBMembers = [{<<"9000000003">>, member}, {<<"9000000004">>, member}], % GroupBCounter = length(GroupBMembers), [{CPhoneId, CClientId, _, _}, {_, DClientId, _, _}] = _GroupBPCs = reg_by_phone(GroupBMembers, Feed), %% Test: join room - #'Room'{members = Room2Members} = roster_client:send_receive(CClientId, 1, #'Link'{type = group, status = join, name = LinkId}), + #'Room'{members = Room2Members} = roster_client:send_receive(CClientId, 1, #'Link'{id = LinkId, type = group, status = join}), true == lists:keymember(CPhoneId, #'Member'.phone_id, Room2Members), %% Test: update old link and try to join with new one - #'Link'{name = LinkId1} = roster_client:send_receive(AClientId, 1, #'Link'{entity_id = RoomId, type = group, status = update, name = LinkId}), - roster_client:send_receive(DClientId, 1, #'Link'{type = group, status = join, name = LinkId1}), -%%% Test: Delete joinlink -%% Non admin user - roster_link:io_error_code(invalid_data) == roster_client:send_receive(DClientId, 1, #'Link'{entity_id = RoomId, type = group, status = delete, name = []}), -%% Admin user, unavailable link - roster_link:io_error_code(invalid_data) == - roster_client:send_receive(AClientId, 1, #'Link'{entity_id = RoomId, type = group, status = delete, name = LinkId}), -%% All valid, successful deletion - #'Link'{entity_id = RoomId, name = [], status = delete} = - roster_client:send_receive(AClientId, 1, #'Link'{entity_id = RoomId, type = group, status = delete, name = LinkId1}), -%% Test join: unexisting link - [{_, EClientId, _, _}] = reg_by_phone([{<<"9000000005">>, member}], #muc{}), - roster_link:io_error_code(room_not_found) == roster_client:send_receive(EClientId, 1, #'Link'{type = group, status = join, name = LinkId1}), -%% Disconnect users - [roster_client:stop_client(CId) || CId <- GroupAClientIds ++ [CClientId, DClientId, EClientId]], - ok. + % #'Link'{name = LinkId1} = +roster_client:send_receive(AClientId, 1, #'Link'{id = LinkId, name = RoomId, type = group, status = update}). +% , +% roster_client:send_receive(DClientId, 1, #'Link'{id = LinkId1, type = group, status = join}), +% %%% Test: Delete joinlink +% %% Non admin user +% roster_link:io_error_code(invalid_data) == roster_client:send_receive(DClientId, 1, #'Link'{id = LinkId, name = RoomId, type = group, status = delete}), +% %% Admin user, unavailable link (old) +% roster_link:io_error_code(invalid_data) == +% roster_client:send_receive(AClientId, 1, #'Link'{id = LinkId, name = RoomId, type = group, status = delete}), +% %% Test join: unexisting link +% [{_, EClientId, _, _}] = reg_by_phone([{<<"9000000005">>, member}], #muc{}), +% roster_link:io_error_code(room_not_found) == roster_client:send_receive(EClientId, 1, #'Link'{id = LinkId1, type = group, status = join}), +% %% Disconnect users +% [roster_client:stop_client(CId) || CId <- GroupAClientIds ++ [CClientId, DClientId, EClientId]], +% ok. suite() -> [ diff --git a/apps/roster/src/test/roster_test.erl b/apps/roster/src/test/roster_test.erl index 44b917a0175eee915638a532f95b9b416bf5e91d..018c30ccab6737887d294d778f5d5e752e6e04f5 100644 --- a/apps/roster/src/test/roster_test.erl +++ b/apps/roster/src/test/roster_test.erl @@ -2339,5 +2339,5 @@ test_security(Host) -> throw({error, unexpected}) end, %% #'History'{data = [_, _]} %% only two message in history -%% = roster_client:send_receive(AClientId, #'History'{feed = Feed, roster_id = APhoneId, size = [], entity_id = 0, status = get}), +%% = roster_client:send_receive(AClientId, #'History'{feed = Feed, roster_id = APhoneId, size = [], entity_id = [], status = get}), roster_client:stop_client([AClientId, BClientId, CClientId]). \ No newline at end of file