mirror of
https://github.com/RoboSats/robosats.git
synced 2025-07-19 09:13:28 +00:00
Working version
This commit is contained in:
@ -168,7 +168,7 @@ class OrderViewSchema:
|
|||||||
"examples": [
|
"examples": [
|
||||||
OpenApiExample(
|
OpenApiExample(
|
||||||
"Order cancelled",
|
"Order cancelled",
|
||||||
value={"bad_request": "This order has been cancelled by the maker"},
|
value={"bad_request": "This order has been cancelled"},
|
||||||
status_codes=[400],
|
status_codes=[400],
|
||||||
),
|
),
|
||||||
OpenApiExample(
|
OpenApiExample(
|
||||||
@ -178,7 +178,7 @@ class OrderViewSchema:
|
|||||||
),
|
),
|
||||||
OpenApiExample(
|
OpenApiExample(
|
||||||
"Order cancelled",
|
"Order cancelled",
|
||||||
value={"bad_request": "This order has been cancelled collaborativelly"},
|
value={"bad_request": "This order has been cancelled"},
|
||||||
status_codes=[400],
|
status_codes=[400],
|
||||||
),
|
),
|
||||||
OpenApiExample(
|
OpenApiExample(
|
||||||
|
@ -207,6 +207,10 @@ class OrderDetailSerializer(serializers.ModelSerializer):
|
|||||||
required=False,
|
required=False,
|
||||||
help_text="True if you are either a taker or maker, False otherwise",
|
help_text="True if you are either a taker or maker, False otherwise",
|
||||||
)
|
)
|
||||||
|
has_password = serializers.BooleanField(
|
||||||
|
required=False,
|
||||||
|
help_text="True if the order is password protected",
|
||||||
|
)
|
||||||
maker_status = serializers.CharField(
|
maker_status = serializers.CharField(
|
||||||
required=False,
|
required=False,
|
||||||
help_text="Status of the maker:\n"
|
help_text="Status of the maker:\n"
|
||||||
@ -438,6 +442,7 @@ class OrderDetailSerializer(serializers.ModelSerializer):
|
|||||||
"is_maker",
|
"is_maker",
|
||||||
"is_taker",
|
"is_taker",
|
||||||
"is_participant",
|
"is_participant",
|
||||||
|
"has_password",
|
||||||
"maker_status",
|
"maker_status",
|
||||||
"taker_status",
|
"taker_status",
|
||||||
"price_now",
|
"price_now",
|
||||||
|
@ -258,7 +258,7 @@ class OrderView(viewsets.ViewSet):
|
|||||||
data["penalty"] = request.user.robot.penalty_expiration
|
data["penalty"] = request.user.robot.penalty_expiration
|
||||||
|
|
||||||
# 2.1) If order has a password
|
# 2.1) If order has a password
|
||||||
if not data["is_participant"] and order.password is not None:
|
if not data["is_participant"] and data["has_password"]:
|
||||||
return Response(data, status.HTTP_200_OK)
|
return Response(data, status.HTTP_200_OK)
|
||||||
|
|
||||||
# 3.a) If not a participant and order is not public, forbid.
|
# 3.a) If not a participant and order is not public, forbid.
|
||||||
|
@ -405,7 +405,7 @@ paths:
|
|||||||
examples:
|
examples:
|
||||||
OrderCancelled:
|
OrderCancelled:
|
||||||
value:
|
value:
|
||||||
bad_request: This order has been cancelled collaborativelly
|
bad_request: This order has been cancelled
|
||||||
summary: Order cancelled
|
summary: Order cancelled
|
||||||
WhenTheOrderIsNotPublicAndYouNeitherTheTakerNorMaker:
|
WhenTheOrderIsNotPublicAndYouNeitherTheTakerNorMaker:
|
||||||
value:
|
value:
|
||||||
@ -1444,6 +1444,9 @@ components:
|
|||||||
is_participant:
|
is_participant:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: True if you are either a taker or maker, False otherwise
|
description: True if you are either a taker or maker, False otherwise
|
||||||
|
has_password:
|
||||||
|
type: boolean
|
||||||
|
description: True if the order is password protected
|
||||||
maker_status:
|
maker_status:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
|
@ -119,7 +119,7 @@ const OrderPage = (): React.JSX.Element => {
|
|||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{!currentOrder?.maker_hash_id && !currentOrder?.bad_request && <CircularProgress />}
|
{!currentOrder?.maker && !currentOrder?.bad_request && <CircularProgress />}
|
||||||
{currentOrder?.bad_request && currentOrder.status !== 5 ? (
|
{currentOrder?.bad_request && currentOrder.status !== 5 ? (
|
||||||
<>
|
<>
|
||||||
<Typography align='center' variant='subtitle2' color='secondary'>
|
<Typography align='center' variant='subtitle2' color='secondary'>
|
||||||
@ -141,7 +141,7 @@ const OrderPage = (): React.JSX.Element => {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
{currentOrder?.maker_hash_id && (!currentOrder.bad_request || currentOrder.status === 5) ? (
|
{currentOrder?.maker && (!currentOrder.bad_request || currentOrder.status === 5) ? (
|
||||||
currentOrder.is_participant ? (
|
currentOrder.is_participant ? (
|
||||||
windowSize.width > doublePageWidth ? (
|
windowSize.width > doublePageWidth ? (
|
||||||
// DOUBLE PAPER VIEW
|
// DOUBLE PAPER VIEW
|
||||||
|
@ -301,9 +301,9 @@ const OrderDetails = ({
|
|||||||
</ListItem>
|
</ListItem>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Divider />
|
{!currentOrder.bad_request && currentOrder.maker_hash_id && (
|
||||||
{!currentOrder.bad_request && (
|
|
||||||
<>
|
<>
|
||||||
|
<Divider />
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<ListItemAvatar sx={{ width: '4em', height: '4em' }}>
|
<ListItemAvatar sx={{ width: '4em', height: '4em' }}>
|
||||||
<RobotAvatar
|
<RobotAvatar
|
||||||
@ -323,7 +323,6 @@ const OrderDetails = ({
|
|||||||
secondary={t('Order maker')}
|
secondary={t('Order maker')}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
|
||||||
<Collapse in={currentOrder?.is_participant && currentOrder?.taker_nick !== 'None'}>
|
<Collapse in={currentOrder?.is_participant && currentOrder?.taker_nick !== 'None'}>
|
||||||
<Divider />
|
<Divider />
|
||||||
<ListItem>
|
<ListItem>
|
||||||
@ -539,7 +538,7 @@ const OrderDetails = ({
|
|||||||
|
|
||||||
{/* If the user has a penalty/limit */}
|
{/* If the user has a penalty/limit */}
|
||||||
{currentOrder?.penalty !== undefined ? (
|
{currentOrder?.penalty !== undefined ? (
|
||||||
<Grid item style={{ width: '100%' }}>
|
<Grid sx={{ marginBottom: 1, width: '100%', padding: '0 16px' }}>
|
||||||
<Alert severity='warning' sx={{ borderRadius: '0' }}>
|
<Alert severity='warning' sx={{ borderRadius: '0' }}>
|
||||||
<Countdown
|
<Countdown
|
||||||
date={new Date(currentOrder?.penalty ?? '')}
|
date={new Date(currentOrder?.penalty ?? '')}
|
||||||
@ -551,8 +550,8 @@ const OrderDetails = ({
|
|||||||
<></>
|
<></>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{currentOrder.bad_request?.includes('password') && (
|
{!currentOrder?.is_participant && currentOrder?.has_password && (
|
||||||
<Grid item style={{ width: '100%', padding: '16px' }}>
|
<Grid item style={{ width: '100%', padding: '0 16px' }}>
|
||||||
<TextField
|
<TextField
|
||||||
fullWidth
|
fullWidth
|
||||||
label={`${t('Password')}`}
|
label={`${t('Password')}`}
|
||||||
@ -571,7 +570,7 @@ const OrderDetails = ({
|
|||||||
</Grid>
|
</Grid>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{!currentOrder?.is_participant || currentOrder.bad_request?.includes('password') ? (
|
{!currentOrder?.is_participant ? (
|
||||||
<Grid item style={{ width: '100%', padding: '8px' }}>
|
<Grid item style={{ width: '100%', padding: '8px' }}>
|
||||||
<TakeButton
|
<TakeButton
|
||||||
password={password}
|
password={password}
|
||||||
|
@ -78,6 +78,7 @@ class Order {
|
|||||||
is_maker: boolean = false;
|
is_maker: boolean = false;
|
||||||
is_taker: boolean = false;
|
is_taker: boolean = false;
|
||||||
is_participant: boolean = false;
|
is_participant: boolean = false;
|
||||||
|
has_password: boolean = false;
|
||||||
maker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
|
maker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
|
||||||
taker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
|
taker_status: 'Active' | 'Seen recently' | 'Inactive' = 'Active';
|
||||||
price_now: number | undefined = undefined;
|
price_now: number | undefined = undefined;
|
||||||
|
@ -506,8 +506,9 @@ class TradeTest(BaseAPITestCase):
|
|||||||
# External user GET
|
# External user GET
|
||||||
trade.get_order(trade.taker_index)
|
trade.get_order(trade.taker_index)
|
||||||
data = trade.response.json()
|
data = trade.response.json()
|
||||||
self.assertEqual(trade.response.status_code, 403)
|
self.assertEqual(trade.response.status_code, 200)
|
||||||
self.assertEqual(data["bad_request"], "This order is password protected")
|
self.assertTrue(data["has_password"])
|
||||||
|
self.assertNotIn("maker_nick", data)
|
||||||
|
|
||||||
# Take with no password
|
# Take with no password
|
||||||
trade.take_order()
|
trade.take_order()
|
||||||
@ -1072,9 +1073,7 @@ class TradeTest(BaseAPITestCase):
|
|||||||
self.assertEqual(trade.response.status_code, 400)
|
self.assertEqual(trade.response.status_code, 400)
|
||||||
self.assertResponse(trade.response)
|
self.assertResponse(trade.response)
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(data["bad_request"], "This order has been cancelled")
|
||||||
data["bad_request"], "This order has been cancelled by the maker"
|
|
||||||
)
|
|
||||||
|
|
||||||
maker_headers = trade.get_robot_auth(trade.maker_index)
|
maker_headers = trade.get_robot_auth(trade.maker_index)
|
||||||
maker_nick = read_file(f"tests/robots/{trade.maker_index}/nickname")
|
maker_nick = read_file(f"tests/robots/{trade.maker_index}/nickname")
|
||||||
@ -1182,21 +1181,15 @@ class TradeTest(BaseAPITestCase):
|
|||||||
|
|
||||||
trade.cancel_order(trade.maker_index)
|
trade.cancel_order(trade.maker_index)
|
||||||
data = trade.response.json()
|
data = trade.response.json()
|
||||||
self.assertEqual(
|
self.assertEqual(data["bad_request"], "This order has been cancelled")
|
||||||
data["bad_request"], "This order has been cancelled by the maker"
|
|
||||||
)
|
|
||||||
|
|
||||||
trade.get_order(trade.taker_index)
|
trade.get_order(trade.taker_index)
|
||||||
data = trade.response.json()
|
data = trade.response.json()
|
||||||
self.assertEqual(
|
self.assertEqual(data["bad_request"], "This order has been cancelled")
|
||||||
data["bad_request"], "This order has been cancelled by the maker"
|
|
||||||
)
|
|
||||||
|
|
||||||
trade.get_order(trade.third_index)
|
trade.get_order(trade.third_index)
|
||||||
data = trade.response.json()
|
data = trade.response.json()
|
||||||
self.assertEqual(
|
self.assertEqual(data["bad_request"], "This order has been cancelled")
|
||||||
data["bad_request"], "This order has been cancelled by the maker"
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_cancel_order_cancel_status(self):
|
def test_cancel_order_cancel_status(self):
|
||||||
"""
|
"""
|
||||||
@ -1219,7 +1212,7 @@ class TradeTest(BaseAPITestCase):
|
|||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
trade.response.json()["bad_request"],
|
trade.response.json()["bad_request"],
|
||||||
"This order has been cancelled by the maker",
|
"This order has been cancelled",
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_cancel_order_different_cancel_status(self):
|
def test_cancel_order_different_cancel_status(self):
|
||||||
@ -1281,7 +1274,7 @@ class TradeTest(BaseAPITestCase):
|
|||||||
self.assertResponse(trade.response)
|
self.assertResponse(trade.response)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
trade.response.json()["bad_request"],
|
trade.response.json()["bad_request"],
|
||||||
"This order has been cancelled collaborativelly",
|
"This order has been cancelled",
|
||||||
)
|
)
|
||||||
|
|
||||||
maker_headers = trade.get_robot_auth(trade.maker_index)
|
maker_headers = trade.get_robot_auth(trade.maker_index)
|
||||||
|
Reference in New Issue
Block a user