Skip to content

Commit

Permalink
fix(dto)!: correct some structural issues with the dtos and add tests (
Browse files Browse the repository at this point in the history
…#154)

* Add tests to verify that all dto types can be de/serialized as bson properly

* fmt

* Add Eq to dto types and compare them in tests

* Use bee-test for things that can be random

* Use bee_test rand_alias_id and rename stardust alias to bee

* Fmt 😤

* Add parse error to types

* Use `u64::MAX` for nonce

Co-authored-by: Jochen Görtler <jochen.goertler@iota.org>
  • Loading branch information
DaughterOfMars and grtlr committed May 18, 2022
1 parent 59c726d commit cef8e8a
Show file tree
Hide file tree
Showing 28 changed files with 1,497 additions and 386 deletions.
123 changes: 110 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Cargo.toml
Expand Up @@ -65,6 +65,9 @@ bee-rest-api-stardust = { package = "bee-rest-api", git = "https://github.com/io
# Tokio Console
console-subscriber = { version = "0.1", default-features = false, optional = true }

[dev-dependencies]
bee-test = { package = "bee-test", git = "https://github.com/iotaledger/bee.git", branch = "shimmer-develop", default-features = false }

[features]
default = [
"analytics",
Expand Down
6 changes: 3 additions & 3 deletions bin/inx-chronicle/src/api/error.rs
Expand Up @@ -36,7 +36,7 @@ pub enum InternalApiError {
#[allow(missing_docs)]
pub enum ApiError {
#[error(transparent)]
BadParse(ParseError),
BadParse(#[from] ParseError),
#[error("Invalid time range")]
BadTimeRange,
#[error("Provided index is too large (Max 64 bytes)")]
Expand All @@ -50,7 +50,7 @@ pub enum ApiError {
#[error("No endpoint found")]
NotFound,
#[error(transparent)]
QueryError(QueryRejection),
QueryError(#[from] QueryRejection),
#[error("Provided tag is too large (Max 64 bytes)")]
TagTooLarge,
}
Expand Down Expand Up @@ -99,7 +99,7 @@ pub enum ParseError {
Bool(#[from] ParseBoolError),
#[cfg(feature = "stardust")]
#[error(transparent)]
BeeMessageStardust(#[from] bee_message_stardust::Error),
StorageType(#[from] chronicle::types::error::ParseError),
#[error(transparent)]
TimeRange(#[from] time::error::ComponentRange),
}
Expand Down
6 changes: 4 additions & 2 deletions bin/inx-chronicle/src/api/stardust/explorer/routes.rs
@@ -1,13 +1,15 @@
// Copyright 2022 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

use std::str::FromStr;

use axum::{extract::Path, routing::get, Extension, Router};
use bee_message_stardust::address as bee;
use chronicle::{db::MongoDb, types::stardust::message::Address};
use futures::TryStreamExt;

use super::responses::{TransactionHistoryResponse, Transfer};
use crate::api::{
error::ParseError,
extractors::{Pagination, TimeRange},
ApiError, ApiResult,
};
Expand All @@ -28,7 +30,7 @@ async fn transaction_history(
end_timestamp,
}: TimeRange,
) -> ApiResult<TransactionHistoryResponse> {
let address_dto = Address::from(&bee::Address::try_from_bech32(&address)?.1);
let address_dto = Address::from_str(&address).map_err(ParseError::StorageType)?;
let start_milestone = database
.find_first_milestone(start_timestamp)
.await?
Expand Down
19 changes: 9 additions & 10 deletions bin/inx-chronicle/src/api/stardust/v2/routes.rs
Expand Up @@ -8,7 +8,6 @@ use axum::{
routing::*,
Router,
};
use bee_message_stardust as bee;
use chronicle::{
db::MongoDb,
types::stardust::message::{MessageId, MilestoneId, OutputId, Payload, TransactionId},
Expand All @@ -17,7 +16,7 @@ use futures::TryStreamExt;

use super::responses::*;
use crate::api::{
error::ApiError,
error::{ApiError, ParseError},
extractors::{Expanded, Pagination},
responses::Record,
ApiResult,
Expand Down Expand Up @@ -52,7 +51,7 @@ pub fn routes() -> Router {
}

async fn message(database: Extension<MongoDb>, Path(message_id): Path<String>) -> ApiResult<MessageResponse> {
let message_id_dto = MessageId::from(bee::MessageId::from_str(&message_id)?);
let message_id_dto = MessageId::from_str(&message_id).map_err(ParseError::StorageType)?;
let rec = database
.get_message(&message_id_dto)
.await?
Expand All @@ -66,7 +65,7 @@ async fn message(database: Extension<MongoDb>, Path(message_id): Path<String>) -
}

async fn message_raw(database: Extension<MongoDb>, Path(message_id): Path<String>) -> ApiResult<Vec<u8>> {
let message_id_dto = MessageId::from(bee::MessageId::from_str(&message_id)?);
let message_id_dto = MessageId::from_str(&message_id).map_err(ParseError::StorageType)?;
let rec = database
.get_message(&message_id_dto)
.await?
Expand All @@ -78,7 +77,7 @@ async fn message_metadata(
database: Extension<MongoDb>,
Path(message_id): Path<String>,
) -> ApiResult<MessageMetadataResponse> {
let message_id_dto = MessageId::from(bee::MessageId::from_str(&message_id)?);
let message_id_dto = MessageId::from_str(&message_id).map_err(ParseError::StorageType)?;
let rec = database
.get_message(&message_id_dto)
.await?
Expand All @@ -103,7 +102,7 @@ async fn message_children(
Pagination { page_size, page }: Pagination,
Expanded { expanded }: Expanded,
) -> ApiResult<MessageChildrenResponse> {
let message_id_dto = MessageId::from(bee::MessageId::from_str(&message_id)?);
let message_id_dto = MessageId::from_str(&message_id).map_err(ParseError::StorageType)?;
let messages = database
.get_message_children(&message_id_dto, page_size, page)
.await?
Expand Down Expand Up @@ -133,7 +132,7 @@ async fn message_children(
}

async fn output(database: Extension<MongoDb>, Path(output_id): Path<String>) -> ApiResult<OutputResponse> {
let output_id = OutputId::from(&bee::output::OutputId::from_str(&output_id)?);
let output_id = OutputId::from_str(&output_id).map_err(ParseError::StorageType)?;
let output_res = database
.get_output(&output_id.transaction_id, output_id.index)
.await?
Expand Down Expand Up @@ -179,7 +178,7 @@ async fn output_metadata(
database: Extension<MongoDb>,
Path(output_id): Path<String>,
) -> ApiResult<OutputMetadataResponse> {
let output_id = OutputId::from(&bee::output::OutputId::from_str(&output_id)?);
let output_id = OutputId::from_str(&output_id).map_err(ParseError::StorageType)?;
let output_res = database
.get_output(&output_id.transaction_id, output_id.index)
.await?
Expand Down Expand Up @@ -231,7 +230,7 @@ async fn transaction_included_message(
database: Extension<MongoDb>,
Path(transaction_id): Path<String>,
) -> ApiResult<MessageResponse> {
let transaction_id_dto = TransactionId::from(bee::payload::transaction::TransactionId::from_str(&transaction_id)?);
let transaction_id_dto = TransactionId::from_str(&transaction_id).map_err(ParseError::StorageType)?;
let rec = database
.get_message_for_transaction(&transaction_id_dto)
.await?
Expand All @@ -246,7 +245,7 @@ async fn transaction_included_message(
}

async fn milestone(database: Extension<MongoDb>, Path(milestone_id): Path<String>) -> ApiResult<MilestoneResponse> {
let milestone_id_dto = MilestoneId::from(bee::payload::milestone::MilestoneId::from_str(&milestone_id)?);
let milestone_id_dto = MilestoneId::from_str(&milestone_id).map_err(ParseError::StorageType)?;
database
.get_milestone_record(&milestone_id_dto)
.await?
Expand Down

0 comments on commit cef8e8a

Please sign in to comment.