Skip to content
Snippets Groups Projects
Commit 5ede2435 authored by Éloïs's avatar Éloïs
Browse files

Merge branch 'gva-pubkey_username' into 'dev'

[feat] gva: idty.username

See merge request !1351
parents 24ed0aad 0feb0612
No related branches found
No related tags found
1 merge request!1351[feat] gva: idty.username
......@@ -16,45 +16,57 @@
use crate::*;
impl DbsReader {
pub fn pubkey_is_member(&self, pubkey: PublicKey) -> KvResult<Option<bool>> {
Ok(self
.0
.gva_identities()
.get(&PubKeyKeyV2(pubkey))?
.map(|identity| identity.is_member))
pub fn idty(
&self,
bc_db: &BcV2DbRo<FileBackend>,
pubkey: PublicKey,
) -> KvResult<Option<duniter_dbs::IdtyDbV2>> {
bc_db.identities().get(
&duniter_dbs::PubKeyKeyV2::from_bytes(pubkey.as_ref())
.map_err(|e| KvError::DeserError(Box::new(e)))?,
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use duniter_dbs::databases::bc_v2::BcV2DbWritable;
use duniter_gva_db::GvaV1DbWritable;
#[test]
fn test_pubkey_is_member() -> KvResult<()> {
fn test_idty() -> KvResult<()> {
let bc_db = duniter_dbs::databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
let gva_db = duniter_gva_db::GvaV1Db::<Mem>::open(MemConf::default())?;
let bc_db_ro = bc_db.get_ro_handler();
let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) });
let pk = PublicKey::default();
// Write test data
gva_db
.gva_identities_write()
.upsert(PubKeyKeyV2(pk), GvaIdtyDbV1::default())?;
bc_db
.identities_write()
.upsert(PubKeyKeyV2(pk), duniter_dbs::IdtyDbV2::default())?;
// Test
assert_eq!(
db_reader.idty(&bc_db_ro, pk)?,
Some(duniter_dbs::IdtyDbV2::default())
);
assert_eq!(db_reader.pubkey_is_member(pk)?, Some(false));
gva_db.gva_identities_write().upsert(
bc_db.identities_write().upsert(
PubKeyKeyV2(pk),
GvaIdtyDbV1 {
duniter_dbs::IdtyDbV2 {
is_member: true,
..Default::default()
username: String::from("JohnDoe"),
},
)?;
assert_eq!(db_reader.pubkey_is_member(pk)?, Some(true));
assert_eq!(
db_reader.idty(&bc_db_ro, pk)?,
Some(duniter_dbs::IdtyDbV2 {
is_member: true,
username: String::from("JohnDoe"),
})
);
Ok(())
}
......
......@@ -16,4 +16,5 @@
#[derive(async_graphql::SimpleObject)]
pub(crate) struct Identity {
pub is_member: bool,
pub username: String,
}
......@@ -79,7 +79,7 @@ mod tests {
use dubp::{block::DubpBlockV10, documents::transaction::TransactionInputV10};
use duniter_dbs::{
databases::{bc_v2::*, cm_v1::CmV1DbReadable},
BlockMetaV2, SourceAmountValV2,
BlockMetaV2, IdtyDbV2, SourceAmountValV2,
};
use duniter_gva_dbs_reader::pagination::*;
use fast_threadpool::ThreadPoolConfig;
......@@ -148,7 +148,7 @@ mod tests {
txs_mp_db_ro: &TxsMpDb,
pubkey: PublicKey,
) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)>;
fn pubkey_is_member(&self, pubkey: PublicKey) -> KvResult<Option<bool>>;
fn idty(&self, bc_db: &BcV2DbRo<FileBackend>, pubkey: PublicKey) -> KvResult<Option<IdtyDbV2>>;
fn unspent_uds_of_pubkey<BcDb: 'static + BcV2DbReadable>(
&self,
bc_db: &BcDb,
......
......@@ -30,13 +30,15 @@ impl IdtyQuery {
let data = ctx.data::<GvaSchemaData>()?;
let dbs_reader = data.dbs_reader();
let pubkey_is_member = data
let idty = data
.dbs_pool
.execute(move |_| dbs_reader.pubkey_is_member(pubkey))
.await??;
.execute(move |dbs| dbs_reader.idty(&dbs.bc_db_ro, pubkey))
.await??
.unwrap_or_default();
Ok(Identity {
is_member: pubkey_is_member.unwrap_or_default(),
is_member: idty.is_member,
username: idty.username,
})
}
}
......@@ -50,24 +52,30 @@ mod tests {
async fn test_idty() -> anyhow::Result<()> {
let mut dbs_reader = MockDbsReader::new();
dbs_reader
.expect_pubkey_is_member()
.withf(|s| {
.expect_idty()
.withf(|_, s| {
s == &PublicKey::from_base58("DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP")
.expect("wrong pubkey")
})
.times(1)
.returning(|_| Ok(Some(true)));
.returning(|_, _| {
Ok(Some(duniter_dbs::IdtyDbV2 {
is_member: true,
username: String::from("JohnDoe"),
}))
});
let schema = create_schema(dbs_reader)?;
assert_eq!(
exec_graphql_request(
&schema,
r#"{ idty(pubkey: "DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP") {isMember} }"#
r#"{ idty(pubkey: "DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP") {isMember, username} }"#
)
.await?,
serde_json::json!({
"data": {
"idty": {
"isMember": true
"isMember": true,
"username": "JohnDoe"
}
}
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment