Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/269 #145

Merged
merged 5 commits into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import 'package:flutter/material.dart';

class ContainerList {
final int? id;
final dynamic? createdAt;
final dynamic? organization;
final int? organizationId;
final dynamic? containerMapping;
final int? price;

ContainerList({
required this.id,
required this.createdAt,
required this.organization,
required this.organizationId,
required this.containerMapping,
required this.price,
});

factory ContainerList.fromJson(Map<String, dynamic> json) {
return ContainerList(
id: json['id'],
createdAt: json['createdAt'],
organization: json['organization'],
organizationId: json['organizationId'],
containerMapping: json['containerMapping'],
price: json['price'],
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'createdAt': createdAt,
'organization': organization,
'organizationId': organizationId,
'containerMapping': containerMapping,
'price': price,
};
}
}

class ContainerCard extends StatelessWidget {
final ContainerList container;

const ContainerCard({super.key, required this.container});

@override
Widget build(BuildContext context) {
return Container(
height: 120,
margin: EdgeInsets.only(right:25.0, left: 25.0, top: 10.0), // Adjust the padding here
child: Container(
child: Card(
elevation: 5,
shadowColor: Colors.blueAccent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
child: Column(
children: [
ListTile(
title: Text(container.id.toString()),
// subtitle: Text(container.price.toString()),
leading: const Row(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: 10,
),
Text("name"),
],
),
),
],
),
),
),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:flutter/material.dart';

import 'container_state.dart';

class ContainerPage extends StatefulWidget {
const ContainerPage({Key? key}) : super(key: key);

@override
State<ContainerPage> createState() => ContainerPageState();
}
108 changes: 108 additions & 0 deletions Application/mobile/app_code/lib/pages/container/container_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:risu/components/alert_dialog.dart';
import 'package:risu/components/appbar.dart';
import 'package:risu/components/bottomnavbar.dart';
import 'package:risu/globals.dart';
import 'package:risu/pages/article/list_page.dart';
import 'package:risu/pages/map/map_page.dart';
import 'package:risu/pages/profile/profile_page.dart';
import 'package:risu/utils/check_signin.dart';
import 'package:risu/utils/theme.dart';
import 'package:http/http.dart' as http;

import 'container_page.dart';
import 'container_list.dart';
import 'dart:convert';

class ContainerPageState extends State<ContainerPage> {
List<ContainerList> containers = [];

@override
void initState() {
super.initState();
getContainer();
}

void getContainer() async {
try {
final response = await http.get(
Uri.parse('http://$serverIp:3000/api/container/listAll'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
final Map<String, dynamic> responseData = json.decode(response.body);
final List<dynamic> containersData = responseData["container"];
setState(() {
containers = containersData
.map((data) => ContainerList.fromJson(data))
.toList();
});
} else {
print('Error getContainer(): ${response.statusCode}');
}
} catch (e) {
print('Error getContainer(): $e');
}
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(
curveColor: context.select((ThemeProvider themeProvider) =>
themeProvider.currentTheme.secondaryHeaderColor),
showBackButton: false,
showLogo: true,
showBurgerMenu: false,
),
body: SingleChildScrollView(
child: Center(
child: Container(
margin: const EdgeInsets.only(
left: 10.0, right: 10.0, top: 20.0, bottom: 20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 30),
const Text(
'Liste des conteneurs',
style: TextStyle(
fontSize: 36,
fontWeight: FontWeight.bold,
color: Color(0xFF4682B4),
),
),
const SizedBox(height: 30),
Column(
children: [
containers.isEmpty
? const Text(
'Aucun conteneur trouvé.',
style: TextStyle(
fontSize: 18,
color: Color(0xFF4682B4),
),
)
: ListView.builder(
shrinkWrap: true,
itemCount: containers.length,
itemBuilder: (context, index) {
final product = containers[index];
return ContainerCard(
container: product,
);
},
),
],
),
],
),
),
),
),
);
}
}
88 changes: 88 additions & 0 deletions Application/mobile/app_code/test/container_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:risu/pages/container/container_list.dart';
import 'package:risu/pages/container/container_page.dart';
import 'package:provider/provider.dart';
import 'package:risu/utils/theme.dart';

void main() {
testWidgets('ContainerStat full info', (WidgetTester tester) async {
await tester.pumpWidget(
MultiProvider(
providers: [
ChangeNotifierProvider<ThemeProvider>(
create: (_) => ThemeProvider(false),
),
],
child: const MaterialApp(
home: ContainerPage(),
),
),
);
await tester.pump();
expect(find.text("Liste des conteneurs"), findsOneWidget);
expect(find.byType(ListView), findsNothing);

});

testWidgets('ContainerMobilePage displays message details',
(WidgetTester tester) async {
final List<ContainerList> containers = [];
containers.add(
ContainerList(
id: 1,
price: 10,
createdAt: null,
organization: null,
organizationId: 2,
containerMapping: null,
),
);

await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Column(
children: [
ListView.builder(
shrinkWrap: true,
itemCount: containers.length,
itemBuilder: (context, index) {
final product = containers[index];
return ContainerCard(
container: product,
);
},
),
],
),
),
),
);

// expect(find.text("""), findsOneWidget);
expect(find.text("1"), findsOneWidget);
});

testWidgets('ContainerMobileCard displays message details',
(WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: ContainerCard(
container: ContainerList(
id: 1,
price: 10,
createdAt: null,
organization: null,
organizationId: 1,
containerMapping: null,
),
),
),
);

expect(find.text("1"), findsOneWidget);
});
}
10 changes: 0 additions & 10 deletions Application/server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -485,16 +485,6 @@ app.post('/api/user/password', async (req, res) => {
}
})

app.get('/api/container/listall', async (req, res) => {
try {
const users = await database.prisma.Containers.findMany()
res.status(200).json(users)
} catch (err) {
console.log(err)
return res.status(400).json('An error occured.')
}
})

app.post('/api/rent/article', async (req, res) => {
try {
const token = req.headers.authorization
Expand Down
Loading