shlist

share and manage lists between multiple people
Log | Files | Refs

commit f0fb01fd9c9206be5d014f735796be53d1a96aff
parent 95740c319f3b65aeaf02ea1d964f4437d36e2d41
Author: Kyle Milz <kyle@0x30.net>
Date:   Sun, 24 Jan 2016 20:06:19 -0700

sl: send back more information in list_join response

Diffstat:
Mserver/sl | 38+++++++++++++++++++++-----------------
Mserver/tests/list_join/test.pl | 13++++++++++---
2 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/server/sl b/server/sl @@ -266,7 +266,7 @@ sub msg_list_update { my ($err, $dev, $list) = unpack_request($db, $request, 'device_id', 'list'); return make_error($err) if ($err); - $err = list_number_valid($db, $list->{num}); + ($err) = list_number_valid($db, $list->{num}); return make_error($err) if ($err); # Check that the device is in the list it wants to update @@ -317,8 +317,8 @@ sub msg_list_join { my ($err, $dev, $list_num) = unpack_request($db, $request, 'device_id', 'list_num'); return make_error($err) if ($err); - $err = list_number_valid($db, $list_num); - return make_error($err) if ($err); + my ($list_err, undef, $list_name, $list_date) = list_number_valid($db, $list_num); + return make_error($list_err) if ($list_err); $log->print("device '$dev->{fp}'\n"); $log->print("list '$list_num'\n"); @@ -334,15 +334,19 @@ sub msg_list_join { return make_error("the device is already part of this list"); } + $db->{list_members_phnums}->execute($list_num); + my $members_ref = $db->{list_members_phnums}->fetchall_arrayref(); + # $members_ref comes back as an array of arrays, flatten it + my @members = map {@$_} @$members_ref; + my $list = { num => $list_num, - # XXX: we should return the following here too - # name => $list_name, - # date => $list_date, - # items_complete => 0, - # items_total => 0, - # members => [ $phnum ], - # num_members => 1 + name => $list_name, + date => $list_date, + items_complete => 0, + items_total => 0, + members => \@members, + num_members => scalar(@members) }; return make_ok( { list => $list } ); } @@ -353,7 +357,7 @@ sub msg_list_leave { my ($err, $dev, $list_num) = unpack_request($db, $request, 'device_id', 'list_num'); return make_error($err) if ($err); - $err = list_number_valid($db, $list_num); + ($err) = list_number_valid($db, $list_num); return make_error($err) if ($err); $log->print("device '$dev->{fp}'\n"); @@ -592,21 +596,21 @@ sub list_number_valid { unless (defined $list_num) { $log->print("list number key not found\n"); - return "the client did not send a list number"; + return ("the client did not send a list number"); } unless (looks_like_number($list_num)) { $log->print("'$list_num' is not a number\n"); - return "the client sent a list number that was not a number"; + return ("the client sent a list number that was not a number"); } $db->{list_select}->execute($list_num); - unless ($db->{list_select}->fetchrow_array()) { - $log->print("unknown list number '$list_num'\n"); - return "the client sent an unknown list number"; + if (my @row = $db->{list_select}->fetchrow_array()) { + return (undef, @row); } - return; + $log->print("unknown list number '$list_num'\n"); + return ("the client sent an unknown list number"); } sub make_error { diff --git a/server/tests/list_join/test.pl b/server/tests/list_join/test.pl @@ -1,7 +1,6 @@ #!/usr/bin/perl -I../ use strict; use warnings; - use client; use test; @@ -15,12 +14,20 @@ $B->friend_add($A->phnum()); # A creates a new list my $list_name = "this is a new list"; $A->list_add($list_name); +my $list_num = $A->lists(0)->{num}; # B joins A's list -$B->list_join($A->lists(0)->{num}); +my $response = $B->list_join($list_num); +my $list = $response->{list}; +fail_num_ne 'list num mismatch', $list->{num}, $list_num; +fail_msg_ne 'this is a new list', $list->{name}; +fail_num_ne 'date mismatch', $list->{date}, 0; +fail_num_ne 'items complete mismatch', $list->{items_complete}, 0; +fail_num_ne 'items total mismatch', $list->{items_total}, 0; +fail_num_ne 'num members mismatch', $list->{num_members}, 2; # B requests its lists to make sure its committed to the list -my ($list) = $B->lists_get(); +($list) = $B->lists_get(); # Verify what we get from server my $stored_list = $A->lists(0);