use futures::future;
use futures::{IntoFuture, Future, Stream};
use futures::stream;
use std::borrow::Borrow;
use fred::error::{
RedisErrorKind,
RedisError
};
use fred::types::*;
use fred::RedisClient;
use super::utils;
pub fn should_sadd_members_to_set(client: RedisClient) -> Box<Future<Item=(), Error=RedisError>> {
Box::new(client.sadd("foo", vec![1, 2, 3]).and_then(|(client, len)| {
assert_eq!(len, 3);
client.sadd("foo", 1)
})
.and_then(|(client, len)| {
assert_eq!(len, 0);
client.sadd("foo", 4)
})
.and_then(|(client, len)| {
assert_eq!(len, 1);
client.sadd("foo", vec![5])
})
.and_then(|(client, len)| {
assert_eq!(len, 1);
client.sadd("foo", vec![1, 2, 6, 7])
})
.and_then(|(client, len)| {
assert_eq!(len, 2);
Ok(())
}))
}
pub fn should_srem_members_of_set(client: RedisClient) -> Box<Future<Item=(), Error=RedisError>> {
Box::new(client.sadd("foo", vec![1, 2, 3]).and_then(|(client, len)| {
assert_eq!(len, 3);
client.srem("foo", 1)
})
.and_then(|(client, len)| {
assert_eq!(len, 1);
client.sadd("foo", vec![1, 4])
})
.and_then(|(client, len)| {
assert_eq!(len, 2);
client.srem("foo", vec![1, 2, 5])
})
.and_then(|(client, len)| {
assert_eq!(len, 2);
client.srem("foo", vec![7])
})
.and_then(|(client, len)| {
assert_eq!(len, 0);
Ok(())
}))
}
pub fn should_smembers_of_set(client: RedisClient) -> Box<Future<Item=(), Error=RedisError>> {
Box::new(client.sadd("foo", vec![1, 2, 3]).and_then(|(client, len)| {
assert_eq!(len, 3);
client.smembers("foo")
})
.and_then(|(client, result)| {
assert_eq!(result.len(), 3);
assert!(result.contains(&RedisValue::String("1".borrow().to_string())));
assert!(result.contains(&RedisValue::String("2".borrow().to_string())));
assert!(result.contains(&RedisValue::String("3".borrow().to_string())));
client.sadd("foo", vec![4])
})
.and_then(|(client, len)| {
assert_eq!(len, 1);
client.smembers("foo")
})
.and_then(|(client, result)| {
assert_eq!(result.len(), 4);
assert!(result.contains(&RedisValue::String("4".borrow().to_string())));
Ok(())
}))
}